假设我有一个指向
MySQL数据库的引擎:
engine = create_engine('@R_502_198@://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',**params: print (sql)
更长的答案是捕获输出仍然存在一些轻微问题.与文字类型的编码一样.但对于任何人来说,加强和抓住他们的痒都不是一个大问题.您总是可以让sqlAlchemy以编程方式创建一个空数据库并从那里转储sql.
更困难的问题是处理架构迁移.这是SQLAlchemy-migrate可以帮助您的地方.