main.py 에 호출한 Base.metadata.create_all(bind=engine) 가 작동하지 않는 상황
# main.py
if __name__ == "__main__":
uvicorn.run(app, host="localhost", port=8000)
Base.metadata.create_all(bind=engine)
core/db.py에서 정의한 Base를 import해서 올바르게 상속받고 있으므로 해당사항 없음# core/db.py
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from core.config import settings
engine = create_engine(str(settings.SQLALCHEMY_DATABASE_URI), echo=True) # echo -> prints SQL
Session = sessionmaker(bind=engine)
Base = declarative_base()
# models.py
from core.db import Base
from sqlalchemy import Column, Integer, String, Enum, ForeignKey, Date
from sqlalchemy.orm import relationship
from enums import Role
class Department(Base):
__tablename__ = 'department'
department_id = Column(Integer, primary_key=True)
name = Column(String(255), nullable=False)
members = relationship("Member", back_populates="department")
main.py에서 core/config.py에서 정의된, .env 에서부터 import된 변수들을 출력해보니 문제없이 출력되었다.Base에 등록되지 않았음테이블 클래스가 선언된 파일에서 Base.metadata.create_all()을 호출하지 않고, 다른 파일에서 호출되었기 때문에 해당 클래스가 참조되지 않았다. 테이블 클래스가 Base.metadata에 추가되지 않으므로 테이블이 생성되지 않는다.
from models import MyTable # 반드시 import 해야 함
Base.metadata.create_all()가 실행된다면 어떤 일이 벌어질까?Base.metadata.drop_all()
Base.metadata.create_all()
ddl-auto=create과는 다르게 작동함