【问题标题】:Alembic: When autogenerating migrations how to ignore database tables by other productsAlembic:自动生成迁移时如何忽略其他产品的数据库表
【发布时间】:2015-09-20 16:40:26
【问题描述】:

我正在使用 Alembic 管理数据库的迁移。多个 Python 包使用同一个数据库,每个包都有自己的迁移路径。

如何告诉 Alembic 在生成自动迁移时忽略其他包中的表?例如当我运行时:

   alembic -c development.ini revision --autogenerate -m "Initial migration"

我的迁移 Python 文件包含其他包的放置表(不在当前的 Alembic env.py 中):

def upgrade():
    ### commands auto generated by Alembic - please adjust! ###
    op.drop_table('table_from_another_package`)

我可以手动编辑迁移文件并删除 drop_table()create_table() 条目,但这是手动容易出错的工作。我宁愿一开始就避免生成它们。

【问题讨论】:

  • 好问题,虽然可能不是一个让多个产品访问同一个数据库的好设计。你至少使用不同的模式吗?还是一些命名约定?我不认为这是开箱即用的支持,但如果我需要让它工作,我可能会查看反映数据库的代码(MetadataEngine)并找到覆盖它的方法以便它过滤掉 no my tables

标签: sqlalchemy alembic


【解决方案1】:

对自动生成对象的完全控制是here

如果您尝试以一次只考虑单个 MetaData 对象的方式运行自动生成,您可能希望在 env.py 文件中添加利用 "X" argument 的自定义。使用此参数来接收您要处理的子组件,并在您的 include_object 函数中查阅该参数以仅查看与该子组件相关的对象。

【讨论】:

    猜你喜欢
    • 2012-06-26
    • 1970-01-01
    • 2020-11-05
    • 2013-06-16
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 2019-11-06
    • 2021-09-14
    相关资源
    最近更新 更多