2013-09-30 3 views
1

Alembic (오프라인 모드)을 사용하여 SQL 마이그레이션 스크립트를 생성하려고합니다. 마이 그 레이션에서보기의 일부는 아래 예제에서와 같이 MySQL 함수 DATE_FORMAT를 사용합니다. 이주 스크립트가 작성되면 생성 된 SQL에서 퍼센트 문자가 두 배가됩니다.DATE_FORMAT을 사용하는 MySQL보기 용 Alembic 마이그레이션 스크립트

대신 생성 된 스크립트를 수동으로 수정하여 % 문자로 다시 설정했지만 연습을 끝내고 수동으로 DB에 파이프 될 수있는 SQL을 업그레이드/다운 그레이드에 생성하고 싶습니다. 가감.

실행 모드에서 no_parameters = True로 설정된 온라인 모드에서 Alembic 마이그레이션을 실행하면 "... 백분율은 이스케이프 처리없이 곧바로 통과하여 교차 호환 연산을 제공합니다. DBAPI 실행 및 정적 스크립트 생성 "

(참조 :https://alembic.readthedocs.org/en/latest/changelog.html#change-1dff9e522d76403d9af885164fd284e9). execution_options이 연결의 속성으로 설정하고 오프라인 모드에서 실행하는 경우에는 연결이 존재하지 않기 때문에

것은,이하지 않는 것 우리에게 옵션이 될 것입니다.

어떤 도움이나 조언을 주시면 감사하겠습니다.

=======================

증류기 마이그레이션 파일 :

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'; 

답변

0

inline_literal 원하는 것 같은 소리.

+0

링크 된 문서를 검토 한 결과이 컨텍스트에서 적용 할 수 없었습니다. 시도 : (1) 문을 inline_literal()에 전달합니다. Alembic이 잘못 내뱉습니다. (2) 문자열 내에서 ... my_date, "" "+ op.inline_literal ('% m/% d/% y') +" ""... Alembic 생성 : concat (concat (% s , '% m/% d/% Y'), % s); (3) .format (op.inline_literal ('% m/% d/% y'))를 사용하면 원래대로 CREATE 문을 반환했습니다 (double %% 사용) inline_literal 사용법이 기존 문자열에 끼어들 때 정말 고맙겠습니다. –

관련 문제