[英]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.