Alembic:从脚本中的模式比较中获取SQL输出

问题描述 投票:1回答:1

我想将当前的db模式与我当前的模型进行比较。虽然compare_metadata提供了一个很好的升级操作列表,但我还想打印出相关的SQL语句(类似于离线alembic upgrade head --sql命令,但之前没有实际生成迁移脚本文件)。

from alembic.autogenerate import compare_metadata
from alembic.migration import MigrationContext
from myapp import models
from sqlalchemy import create_engine
engine = create_engine("db_url...")
diff_list = compare_metadata(
    MigrationContext.configure(engine.connect()),
    models.meta.metadata
)

也许SQL语句可以使用produce_migrations api命令以某种方式生成,该命令返回MigrationScript对象并用作compare_metadata命令的输入(请参阅http://alembic.zzzcomputing.com/en/latest/api/autogenerate.html#customizing-revision)。谢谢。

python sqlalchemy alembic
1个回答
1
投票

我不认为它可以生成SQL语句,因为它们可能会有所不同,具体取决于您使用的数据库引擎,但您可以为此生成SQL Alchemy语句:

from alembic.migration import MigrationContext
from myapp import models
from sqlalchemy import create_engine
engine = create_engine("db_url...")

mc = MigrationContext.configure(engine.connect())
diff_list = compare_metadata(mc, models.meta.metadata) # not needed for this
migrations = produce_migrations(mc, models.meta.metadata) # we need this instead
sqlalchemy_statements = render_python_code(migrations.upgrade_ops))

print sqlalchemy_statements # just to see the result
© www.soinside.com 2019 - 2024. All rights reserved.