【问题标题】:Is it possible to retrieve metadata object in alembic migration?是否可以在 alembic 迁移中检索元数据对象?
【发布时间】:2016-08-08 14:53:56
【问题描述】:

我需要迁移架构和数据。我想按如下所述进行组织。但是 sqlalchemy.Table 需要 Metadata 对象。是否可以从 alembic 中检索它?

metadata = op.get_metadata() # how i can do this?

table = sa.Table('my_table', metadata, sa.Column('id',…), ...)

def upgrade():
    op.create_table(table)
    if context.get_x_argument(as_dictionary=True).get('data', None):
        data_upgrades()

def downgrade():
    if context.get_x_argument(as_dictionary=True).get('data', None):
        data_downgrades()
    op.drop_table(table)

def data_upgrades():
    op.bulk_insert(table, [ ... ])

def data_downgrades():
    table.delete()

【问题讨论】:

    标签: python sqlalchemy migration alembic


    【解决方案1】:

    我能够使用以下内容构造一个新的元数据对象:

     import alembic
     from sqlalchemy.schema import MetaData
    
     metadata = MetaData(bind=alembic.op.get_bind())
    

    这应该可行。我不能 100% 确定是否真的需要绑定(取决于您的用例)。

    对于旧版本的alembic,您可能需要改用以下行:

     metadata = MetaData(bind=alembic.context.get_context().bind)
    

    【讨论】:

    • 这对我有用。在我使用的版本 (0.9.6) 中,有一个更短的 API 来获取绑定:MetaData(bind=alembic.op.get_bind())
    猜你喜欢
    • 2016-09-06
    • 1970-01-01
    • 2013-07-31
    • 2013-10-20
    • 2016-05-21
    • 2015-03-24
    • 1970-01-01
    • 2018-09-22
    相关资源
    最近更新 更多