我想将当前的数据库模式与当前的模型进行比较。
尽管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
)
也许可以使用produce_migrations
api命令以某种方式生成SQL语句,该命令返回一个MigrationScript
对象,并用作compare_metadata
命令的输入(请参见http://alembic.zzzcomputing.com/en/latest/api/autogenerate.html#customizing-revision )。谢谢。
答案 0 :(得分: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