Мы пытаемся создать сценарий миграции SQL с помощью Alembic (автономный режим). Часть представления при миграции использует функцию MySQL DATE_FORMAT, как в примере ниже. При создании сценариев миграции символы процента удваиваются в сгенерированном SQL.
Мы вручную модифицировали сгенерированные скрипты, чтобы вместо этого вернуть их к одному символу %, но хотели бы отказаться от этой практики и чтобы наши обновления/понижения генерировали SQL, который можно было бы передать в БД без ручной модификации.
Из того, что мне удалось определить, запуск миграции Alembic в онлайн-режиме с параметром no_parameters = True, установленным в параметрах выполнения, позволяет: «...процентные знаки проходят без экранирования, что обеспечивает кросс-совместимую операцию с выполнением DBAPI. и создание статического скрипта."
(см. https://alembic.readthedocs.org/en/latest/changelog.html#change-1dff9e522d76403d9af885164fd284e9 )
Поскольку execute_options задаются как свойство соединения, а соединение отсутствует при работе в автономном режиме, этот вариант для нас не подходит.
Любая помощь или совет будут высоко оценены!
=======================
Файл миграции 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';