Skip to content

database.py

mjkweon17 edited this page Aug 22, 2023 · 2 revisions
class EngineConn:
    def __init__(self):
        self.engine = create_engine(SQLALCHEMY_DATABASE_URL, pool_recycle=500)
    def get_session(self):
        session_local = sessionmaker(autoflush=False, autocommit=False, bind=self.engine)
        return session_local()
    def get_connection(self):
        return self.engine.connect()

def get_db():
    engine_conn = EngineConn()
    try:
        session = engine_conn.get_session()
        yield session
    finally:
        session.close()
  1. 클래스 EngineConn: 이 클래스는 SQLAlchemy의 create_engine 함수를 감싼 래퍼로 보입니다. 이 클래스에는 다음과 같은 메서드들이 있습니다:
    • init(self): 생성자는 create_engine 함수를 사용하여 데이터베이스 엔진을 초기화합니다. SQLALCHEMY_DATABASE_URL과 pool_recycle 매개변수를 전달합니다. pool_recycle은 500으로 설정되어 있어 연결이 500초마다 재활용되어 연결이 끊기지 않도록 합니다.
    • get_session(self): 이 메서드는 SQLAlchemy의 sessionmaker 클래스를 사용하여 세션을 생성하고 반환합니다. 세션은 생성자에서 만든 데이터베이스 엔진에 바인딩됩니다. autoflush 및 autocommit 매개변수는 False로 설정되어 있습니다.
    • get_connection(self): 이 메서드는 데이터베이스 엔진의 connect() 메서드를 호출하여 데이터베이스 연결을 반환합니다.
  2. 함수 get_db(): 이 함수는 데이터베이스 세션을 얻기 위한 팩토리 함수. EngineConn 클래스의 인스턴스를 생성하고 get_session() 메서드를 사용하여 세션을 얻은 후 세션을 생성합니다. 세션을 생성하여 반환함으로써 컨텍스트 매니저에서 이 함수를 사용하여 리소스를 더욱 효율적으로 관리할 수 있습니다.
    • finally 블록은 세션이 더 이상 필요하지 않을 때 세션을 닫도록 보장합니다.
    • 전반적으로 이 코드는 SQLAlchemy를 사용하여 데이터베이스 연결 및 세션을 생성하고 관리하는 편리한 방법을 제공합니다. 웹 응용 프로그램 또는 기타 리소스 관리가 중요한 경우에 특히 유용합니다. 코드 내에서 SQLALCHEMY_DATABASE_URL는 실제 데이터베이스 URL과 연결됨.

코드 분석 /app

코드 분석 /app/internal

코드 분석 /app/internal/schemas

코드 분석 /app/internal/security

코드 분석 /app/routers

Clone this wiki locally