我們的網絡應用程序基於金字塔框架中的sqlalchemy,我們正在尋找使用alembic來管理數據庫遷移。 Web應用程序由在一個數據庫上運行的各種軟件包組成。這意味着我們有多個需要遷移的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添加表的新版本的文件。但事實並非如此。我在這裏做錯了什麼。
Sergey。我們的模型具有一定的依賴關係層次。是的,將所有內容全部放在一個models.py中是最不可取的。 在創建一個單獨的基礎包(這是我們實際上正在做的事情)時,我們需要做的唯一附加事情就是創建一個元數據實例並將其傳遞到declarative_base。那是對的嗎 ? 如果我們這樣做,那麼target_metadata = Base.metadata將綁定在所有表中? alembic修訂檢查過程如何找出所有從Base繼承的人? –