gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:46:40 25 4
gpt4 key购买 nike

假设我有一个指向 MySQL 数据库的引擎:

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的地方可以帮助你。

关于python - 如何在 SQLAlchemy 中使用引擎的 SQL 方言生成带有 DDL 的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/870925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com