웹 응용 프로그램은 피라미드 프레임 워크의 sqlalchemy를 기반으로하며 데이터베이스 마이그레이션 관리를 위해 alembic을 사용하려고합니다. 웹 응용 프로그램은 하나의 데이터베이스에서 작동하는 다양한 패키지로 구성됩니다. 따라서 마이그레이션해야하는 여러 models.py가 있음을 의미합니다. 나는 이것을 어떻게 처리해야하는지 혼란 스럽다. 내 env.py에서 다음을 사용하여 멀리까지 진행할 수 있습니다.alembic을 사용하여 여러 models.py 처리
from pkg_a.app.models import Base as pkg_a_base
from pkg_b.app.models import Base as pkg_b_base
from pkg_c.app.models import Base as pkg_c_base
def combine_metadata(*args):
m = MetaData()
for metadata in args:
for t in metadata.tables.values():
t.tometadata(m)
return m
target_metadata = combine_metadata(pkg_a_base, pkg_b_base, pkg_c_base)
위대한 작품입니다. 그러나 나중에 하나 이상의 모델을 추가하면이 목록에 모델을 추가하는 것만으로는 충분하지 않습니다. 나는
alembic revision -m "added a new model pkg_d.models" --version-path=migrations/versions --autogenerate
를 실행하는 pkg_d.models에서 테이블을 추가하는 코드를하는 새로운 버전의 파일을 생성 할 것이라고 기대했다. 그러나 그렇지 않습니다. 내가 여기서 잘못하고있는 것은 무엇인가.
세르게이. 우리 모델에는 몇 가지 의존성 계층이 있습니다. 그리고 예, 그것은 하나의 models.py에 모든 것을 채우는 것이 가장 바람직하지 않습니다. 우리가 수행 한 것과 다른 별도의 기본 패키지를 만들 때 우리가해야 할 추가 작업은 아마도 메타 데이터 인스턴스를 만들어서 declarative_base에 전달하는 것뿐입니다. 그 맞습니까 ? 이렇게하면 target_metadata = Base.metadata가 모든 테이블을 연결합니까? alembic 개정 검사 프로세스가 Base로부터 누구를 상속하는지 알아내는 방법은 무엇입니까? –