from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
# 데이터베이스 URL을 설정
SQLALCHEMY_DATABASE_URL = "sqlite:///./todos.db"
# 기본적으로 SQLite는 동일한 스레드에서만 데이터베이스 연결을 공유
# 옵션을 False로 설정하면 여러 스레드에서 같은 연결을 사용할 수 있음(SQLite의 경우에만 해당)
engine = create_engine(SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False})
# 세션은 데이터베이스와의 상호작용을 관리하는 중요한 객체로, 트랜잭션을 관리하고 데이터베이스에 쿼리를 전송하는 데 사용
# autocommit=False: 세션에서 쿼리를 실행할 때마다 자동으로 커밋하지 않음
# autoflush=False: 세션에서 쿼리를 실행할 때마다 자동으로 flush하지 않음
# bind=engine: 세션을 데이터베이스와 연결
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) # 세션 생성기
# 모델 클래스의 베이스 클래스
# 이 클래스는 SQLAlchemy가 테이블 구조를 이해하고 관리할 수 있도록 도와줌
Base = declarative_base() # 모든 모델 클래스는 이 클래스를 상속받아야 함