19

会社のさまざまな部門用に製品データベース システムを作成したとします。各部門には、さまざまな理由から独自の PostgreSQL データベース インスタンスがあります。データベースのスキーマは同じですが、データベース内のデータは異なります。これらのシステムのそれぞれに対して、いくつかのビジネス ロジック (無関係) を実行する Python アプリケーションが存在します。各 Python アプリは、SQLAlchemy を介してそのデータベースのみにアクセスします。

これらすべてのデータベースのすべてのデータにアクセスできるスーパーバイザー システムを作成したいと考えています (リードスルー機能)。

これが私が考えていることの例です: ここに画像の説明を入力

SQLAlchemyでそれを行うことはできますか? もしそうなら、その種の問題に対する最善のアプローチは何ですか?

4

1 に答える 1

18

確かに、SQLAlchemyでそれを行うことができます。

あなたがする必要があるのは、それぞれが独自のセッションメーカーを持つ異なる接続エンジンを作成することです。SQLAlchemyには、一度に1つのデータベースのみに制限されるものはありません。

engines = []
sessions = []
for dbconninfo in databases:
    engine = create_engine(dbconninfo)
    engines.append(engine)
    sessions.append(sessionmaker(bind=engine)())

各セッションを使用してクエリを実行できます。結果オブジェクトは、クエリを生成したセッションにアタッチされるため、変更は正しいデータベースに戻ります。たとえば、あるセッションから別のセッションにオブジェクトをマージした場合に何が起こるかを確認するために、セッションのドキュメントを詳細に調べてください。

于 2012-09-10T13:12:53.730 に答える