2016-12-14 5 views
0

Flask-Migrate==2.0.0을 사용 중입니다. 변경 사항을 올바르게 감지하지 못합니다. python manage db migrate을 실행할 때마다 이전 버전에서 성공적으로 추가되었지만 모든 모델에 대한 스크립트가 생성됩니다. 두 개의 새 열을 테이블에 추가했습니다. 마이그레이션 리비전에는 테이블이 추가되는 대신 두 개의 새 열만 있어야합니다. 내가 누락 된 것이 있습니까? 일이 뭐죠 여기Alembic이 올바른 변경을 생성하지 않음

EDIT 1

이다. Flask_Migrate를 프로젝트에 추가했습니다.

python manage db init 
python manage db migrate 
python manage db upgrade 

플라스크-마이그레이션이 좀 변경 한 이후 개정

985efbf37786

을 갖는 모델 플러스 alembic_version 테이블에 대한 테이블을 생성합니다. 나는 나의 테이블 중 하나에 두 개의 새 열을 추가하고 새로운 버전

934ba2ddbd44

대신 단지 만이 새 열을 추가 생성

python manage db migrate 

명령을 다시 실행 개정판에는 모든 테이블과이 두 개의 새 컬럼에 대한 스크립트가 들어 있습니다. 예를 들어, 첫 번째 개정판에서 나는 이와 비슷한 것을 가지고 있습니다.

op.create_table('forex_costs', 
sa.Column('code', sa.String(), nullable=False), 
sa.Column('country', sa.String(), nullable=False), 
sa.Column('rate', sa.Numeric(), nullable=False), 
sa.PrimaryKeyConstraint('code', 'country', name='forex_costs_id'), 
schema='regis' 
) 

두 번째 개정 본에는 정확히 동일한 코드가 들어 있습니다. 나는 왜 그것이 이미 생성되었는지 이해하지 못한다.

나는 그것을 약간 googled 내 문제는 정확하게 https://github.com/miguelgrinberg/Flask-Migrate/issues/93처럼 보이지만 나는 오라클 DB를 사용하지 않고있다. PostgreSQL을 사용하고 있습니다. 또한 어떤 효과가 있는지 모르겠지만 기본 공개 스키마에 내 테이블을 만들지 않고 테이블 (100 개 정도)이 많아서 두 개의 새로운 스키마 (schema_a 및 schema_b)를 작성합니다. 그래서 그들을 정리하는 것.

편집 2

첫 번째 문제는

env.py.에서 = 진정한

include_schemas을 추가하여 해결 된 것 같습니다

이제 새로운 마이그레이션은 기존 테이블을 다시 만들려고하지 않지만 외래 키과 관련된 몇 가지 문제가 있습니다. 새 개정판을 작성할 때마다 이미 존재하는 외부 키를 제거한 다음 추가하려고 시도합니다. 로그는 다음과 같습니다.

INFO [alembic.autogenerate.compare] Detected removed foreign key (post_id)(post_id) on table album_photos 
INFO [alembic.autogenerate.compare] Detected removed foreign key (album_id)(album_id) on table album_photos 
INFO [alembic.autogenerate.compare] Detected removed foreign key (user_id)(user_id) on table album_photos 
INFO [alembic.autogenerate.compare] Detected added foreign key (album_id)(album_id) on table prodcat.album_photos 
INFO [alembic.autogenerate.compare] Detected added foreign key (post_id)(post_id) on table prodcat.album_photos 
INFO [alembic.autogenerate.compare] Detected added foreign key (user_id)(user_id) on table prodcat.album_photos 

각 외래 키 제약 조건에 이름을 추가했지만 아무런 효과가 없습니다.

+1

당신 유무 : Btw는

postgres를 사용하는 동안 나는 당신과 같이 블록 context.configure에서 include_schemas 옵션을 포함해야한다는 것을 지적하고 싶습니다, 2 시간 동안 같은 문제에 슬픔이 있었다 당신의 문제에 관한이 토론을 보았습니까? https://groups.google.com/forum/#!topic/sqlalchemy-alembic/FA8wpmPJc7U – Miguel

답변

0

search_path를 public으로 설정하면이 문제가 해결됩니다. 필자는 항상 각 모델에 명시 적으로 스키마 정보를 설정하는 것 외에도 search_path에 스키마를 추가해야한다고 생각했습니다. 내가 틀렸어. schema가 각 모델에 명시 적으로 정의되면 postgresql search_path를 변경할 필요가 없습니다.

검색 경로는 반영된 외래 키 정의가 이 모델에있는 것과 일치하지 않음을 의미합니다. 이것은 외래 키 에만 해당하므로 Postgresql에서는이를 수행합니다. 배경색은 http://docs.sqlalchemy.org/en/latest/dialects/postgresql.html#remote-schema-table-introspection-and-postgresql-search-path 입니다. - Michael Bayer

0

문제를 해결 한 후 의견을 보내 주셔서 감사합니다.

context.configure(connection=connection, 
        target_metadata=target_metadata, 
        include_schemas=True, 
        process_revision_directives=process_revision_directives, 
        **current_app.extensions['migrate'].configure_args)