1

Alembic (オフライン モード) を使用して SQL 移行スクリプトを生成しようとしています。移行のビューの一部は、以下の例のように MySQL 関数 DATE_FORMAT を使用します。移行スクリプトが作成されると、生成された SQL でパーセント文字が 2 倍になります。

生成されたスクリプトを手動で変更して、代わりに単一の % 文字に戻していますが、その慣行から抜け出し、手動で変更せずにデータベースにパイプできる SQL をアップグレード/ダウングレードで生成したいと考えています。

私が判断できたことから、no_parameters = True を execution_options に設定してオンライン モードで Alembic 移行を実行すると、" ...percent はエスケープせずにそのまま通過するため、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';
4

1 に答える 1