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

2024-10-01 09:32:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我可以用表、fk等填充dtdb,方法是:

^{pr2}$

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

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

看起来SA有非常复杂的模式管理API,但是我还没有看到简单地将模式定义流式传输为文本的例子。在


Tags: 方法echo数据库truelocalhostcreatemysql语句
1条回答
网友
1楼 · 发布于 2024-10-01 09:32:53

快速答案在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中,语法被简化。在

^{pr2}$

更长远的答案是,获取输出仍然有一些小问题。就像对类型的文字进行编码一样。但对于任何人来说,这还不是一个大问题,让他们开始努力。您总是可以让SQLAlchemy以编程方式创建一个空数据库并从那里转储SQL。在

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

相关问题 更多 >