2016-11-13 11 views
1

私はフラスコ、SQLAlchemyの、およびflask_migrateを使用しようとしている...フラスコ移行異なるPostgresのスキーマ(__table_args__ = { 'スキーマ': 'test_schema']})を使用して

しかし毎回実行manage.pyの移行を、alembicは常に私のモデルを新しいテーブルとして検出します。

私は別のPostgresのスキーマに格納するテーブルにtable_args私のモデルでを置くことを考える:

class Entry(db.Model): 
    __table_args__ = {'schema': app.config['BASE_SCH']} 
    id = db.Column(db.Integer, primary_key=True) 
    title = db.Column(db.String(100)) 
    slug = db.Column(db.String(100), unique=True) 
    body = db.Column(db.Text) 
    status = db.Column(db.SmallInteger, default=STATUS_PUBLIC) 
    created_timestamp = db.Column(db.DateTime, default=datetime.datetime.now) 
    modified_timestamp = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now) 

私は私のモデルのtable_args行を削除する場合は、フラスコの移行が正常に動作します。四角形のポストグラムスキーマに私のテーブルを格納する。

したがって、どのようにフラスコで異なるPostgresテーブルスキーマを使用できますか?

ありがとうございます!

+0

生成された移行スクリプトを確認しましたか?私はそれが 'スキーマ'が不足していると仮定します。もしあなたが手動で追加すれば、あなたのためにうまくいくでしょう。 – Miguel

+0

こんにちは@Miguel、あなたのコメントをありがとう...マイグレーションスクリプトでは、各テーブルブロックの作成の最後にスキーマ定義があります。おそらく、アレムビックは移行中に異なる表スキーム(ポストグル)を認識できないと思われます。 –

+0

私はまったく同じ問題を抱えています。デフォルトのスキーマにないモデルを持っています。初期の移行は良く見えます(スキーマが指定されています)。しかし、 'flask db migrate'への次の呼び出しでは、最初のテーブルの正確な複製である新しい移行が作成されます。これは、AlembicはテーブルにDBがすでに存在することを認識していません。 –

答えて

0

最終的にこれを見つけました。設定にオプションがあり、これを設定するとTrueに設定すると、Alembicはすべてのスキーマを強制的にスキャンして移行を生成します。

(少し)詳細:http://alembic.zzzcomputing.com/en/latest/api/runtime.html#alembic.runtime.environment.EnvironmentContext.configure.params.include_schemas

アレンビック/フラスコ-移行がせずにデフォルト以外のスキーマに最初の場所に設定され、このオプションをテーブル用のマイグレーションを生成して、なぜそれは私には完全には明らかではありません...むしろ、デフォルト以外のスキーマではマイグレーションを作成しますが、DB内でこれらのテーブルを検出しないという事実は驚くべき動作です。

関連する問題