使用DATE_FORMAT的MySQL视图的Alembic迁移脚本

时间:2013-09-30 18:18:04

标签: mysql sqlalchemy alembic

我们正在尝试使用Alembic(离线模式)生成SQL Migration脚本。迁移中的部分视图使用MySQL函数DATE_FORMAT,如下例所示。创建迁移脚本时,生成的SQL中的百分比字符将加倍。

我们一直在手动修改生成的脚本,将其重新设置为单个%字符,但我希望摆脱这种做法并让我们的升级/降级生成可以通过管道传输到数据库而无需手动修改的SQL

从我能够确定的,在执行权限选项中使用no_parameters = True设置在线模式下运行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';

1 个答案:

答案 0 :(得分:0)

inline_literal听起来像你想要的东西。