我们正在尝试使用 Alembic(离线模式)生成 SQL 迁移脚本。迁移中的部分视图使用 MySQL 函数 DATE_FORMAT,如下例所示。创建迁移脚本时,百分比字符在生成的 SQL 中加倍。
我们一直在手动修改生成的脚本以将其设置回单个 % 字符,但希望摆脱这种做法,让我们的升级/降级生成可以在不手动修改的情况下通过管道传输到数据库的 SQL。
据我所知,使用 no_parameters = True 在 execution_options 中设置的在线模式运行 Alembic 迁移允许,“ ...百分号直接通过而不转义,从而提供与 DBAPI 执行和静态脚本的交叉兼容操作一代。 ”
(见: https ://alembic.readthedocs.org/en/latest/changelog.html#change-1dff9e522d76403d9af885164fd284e9 )
由于 execution_options 被设置为 Connection 的一个属性,并且在离线模式下运行时不存在任何连接,这对我们来说似乎不是一个选项。
任何帮助或建议将不胜感激!
========================
Alembic 迁移文件:
def upgrade():
my_view_sql = """
CREATE VIEW my_view
AS
SELECT DATE_FORMAT(m.my_date, '%m/%d/%Y') AS 'my_date'
FROM some_table as m
"""
op.execute(my_view_sql)
=======================
生成的 SQL:
-- Running upgrade old_version -> new_version
CREATE VIEW my_view
AS
SELECT DATE_FORMAT(m.my_date, '%%m/%%d/%%Y') AS 'my_date'
FROM some_table as m;
UPDATE alembic_version SET version_num='new_version';