如何在SQLAlchemy的引擎SQL方言中使用DDL生成文件?

Pav*_*pin 8 python sqlalchemy

假设我engine指向MySQL数据库:

engine = create_engine('mysql://arthurdent:answer42@localhost/dtdb', echo=True)
Run Code Online (Sandbox Code Playgroud)

我可以通过以下方式填充dtdb表格,FK等:

metadata.create_all(engine)
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法来生成包含所有DDL语句的SQL文件,而不是实际应用这些DDL语句dtdb

到目前为止,我已经采取了捕获SQLAlchemy日志输出echo=True,并手动编辑它.但那太痛苦了.

看起来SA有相当复杂的模式管理API,但我还没有看到简单地将模式定义作为文本流式传输的示例.

Ant*_*sma 14

快速回答在SQLAlchemy 0.8 FAQ中.

在SQLAlchemy 0.8中你需要做

engine = create_engine(
'mssql+pyodbc://./MyDb',
strategy='mock',
executor= lambda sql, *multiparams, **params: print (sql.compile(dialect=engine.dialect)))
Run Code Online (Sandbox Code Playgroud)

在SQLAlchemy 0.9中,语法被简化了.

engine = create_engine(
'mssql+pyodbc://./MyDb',
strategy='mock',
executor= lambda sql, *multiparams, **params: print (sql)
Run Code Online (Sandbox Code Playgroud)

更长的答案是捕获输出仍然有一些小问题.与文字类型的编码一样.但这对任何人来说都不是一个大问题.您总是可以让SQLAlchemy以编程方式创建一个空数据库并从那里转储SQL.

更困难的问题是处理架构迁移.这是SQLAlchemy-migrate可以帮助您的地方.