2016-07-09 13 views
2

私はかなり標準的なフラスコアプリを持っています。 flask_sqlalchemyを使用してpostgresサーバーとalembicへの接続を管理して移行を管理します。複数のデータベースでのalembicの使用

ここで私は別のプロジェクトと統合する過程にあります。つまり、別のデータベースから単一のモデルを取得できるようにしようとしています。幸運にも、flask_sqlalchemySQLALCHEMY_BINDSフラグでこれを大きくサポートしています。だから私はそう新しいモデルを設定して私のアプリを持っている:

class CoreUser(UserMixin, db.Model): 
    __bind_key__ = 'core' 

    id = db.Column(db.Integer, primary_key=True) 
    email = db.Column(db.String(255), unique=True) 

これまでのところとても良い。私のアプリはこの時点で他のデータベースをチェックします。しかしここでマイナスです。私はalembicを使用して実際にデータベース内のすべてのスキーマを管理していますので、私は通常のalembic revision --autogenerateスクリプトを実行すると、実際にはこの2番目のデータベースに何もしません。そして、ちょうどのパズル。

代わりに、適切なcore_userリレーションシップを最初のデータベースに設定します。このスキーマ定義に遭遇したときに、別のデータベースにリレーションシップを作成する必要があることを、アレムビックにどのように示すことができますか?

this(古代)スレッドの助言に、以下のように私は私のalembic.iniファイルを更新しようとしました:

[core_db] 
sqlalchemy.url = <DATABASE_URI> 
script_location = alembic 

し、次のコマンドを実行している:

alembic -n core_db revision --autogenerate 
alembic -n core_db upgrade head 

とリビジョンしばらくこれが失敗しない場合、core_dbsqlalchemy.urlパラメータで示されるデータベースに実際に作成された関係はありません。

私は4年前のGoogleグループスレッドよりも優れたドキュメントを見つけることができませんでしたが、私の現在のアプローチは機能していないようで、次のステップはありません。私は適切なalembicドキュメントを見つけることができませんが、これは非常に単純で一般的な使用例のようです。したがって、これはサポートされていないとは想像できません。

アドバイスはありますか?

+0

最後にこの問題に移行しましたか? :) –

+0

@NikolayFominyhはい、私はそれが実際にはこれを処理していないことを認識した。 –

答えて

1

これまでに行った手順は正しいです。

ただし、target_metadataを各データベースにenv.pyに割り当てましたか?

渡されるメタデータが両方のデータベースで同じ場合、異なるリレーションシップは検出されないため、自動生成されたスクリプトは、探しているものを反映しません。

Base.metadata.tables変数を調べて、どのテーブルがメタデータに関連付けられているかを確認します。

各データベースに必要なテーブルのみを渡します。env.py。データベースごとに1つずつscript_locationに設定する必要があります。

0

それは、多くのデータベースの異なるモデルための移行を処理するのは難しいです。

ここでは、異なるモデルのN個のデータベースがあります。以下の構造は、データベースを隔離したままにしておくのに役立ちます。

. 
├── app 
│   ├── __init__.py 
│   ├── alembic.ini 
│   ├── employee 
│   │   ├── __init__.py 
│   │   ├── models.py 
│   │   └── views.py 
│   ├── migrations 
│   └── user 
│    ├── __init__.py 
│    ├── models.py 
│    └── views.py 
├── daemon 
│   ├── __init__.py 
│   ├── alembic.ini 
│   ├── daemon_engine.py 
│   ├── migrations 
│   └── models.py 
├── run.py 
└── tests 
関連する問題