繁体   English   中英

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

[英]How to generate a file with DDL in the engine's SQL dialect in SQLAlchemy?

假设我有一个指向MySQL数据库的engine

engine = create_engine('mysql://arthurdent:answer42@localhost/dtdb', echo=True)

我可以用表格,FK等填充dtdb

metadata.create_all(engine)

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

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

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

快速回答在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)))

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM