2016-12-14 13 views
0

私はFlask-Migrate==2.0.0を使用しています。変更が正しく検出されません。 python manage db migrateを実行するたびに、以前のリビジョンで正常に追加されていますが、すべてのモデルのスクリプトが生成されます。 2つの新しい列をテーブルに追加しました。移行リビジョンには、2つの新しい列のみがあり、すべてのテーブルが追加されています。私が行方不明のものはありますか?起こっていただきました!ここで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 

再度コマンドを実行します。リビジョンには、すべてのテーブルとその2つの新しいカラムのスクリプトが含まれています。たとえば、私の最初の改訂版では、このようなものがあります。

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

2番目の改訂版にもまったく同じコードが含まれています。私はなぜそれが既に生成された場合、なぜ理解していない。

私はそれをちょっと調べて、私の問題はちょうどhttps://github.com/miguelgrinberg/Flask-Migrate/issues/93のように見えますが、私はoracle DBを使用していません。私はPostgreSQLを使用しています。私はそれが何か影響を持っているかどうかわかりませんが、私はデフォルトのパブリックスキーマで自分のテーブルを作成していない代わりに、私は2つの新しいスキーマ(schema_aとschema_b)を作成しています。だからちょうどそれらを手配する。

EDIT 2

最初の問題は、

env.py.で= Trueの

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

はあなたを持っている:ところで

postgresを使用している間、私は私はあなたがそうのようなブロックcontext.configureinclude_schemasオプションを含めるしなければならないことを指摘したいと思い、2時間同問題と悲しみを持っていましたあなたの問題についてこのディスカッションを見ましたか? https://groups.google.com/forum/#!topic/sqlalchemy-alembic/FA8wpmPJc7U – Miguel

答えて

0

search_pathをpublicに設定するとこの問題が修正されました。私はいつも、各モデルにスキーマ情報を明示的に設定するだけでなく、それらのスキーマをsearch_pathに追加する必要があると考えました。私は間違っていた。スキーマが各モデルで明示的に定義されると、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) 
関連する問題