1

外部アプリケーションからのデータが事前に入力された、複数の sqlite3 データベースを使用するアプリケーションを実行しています。各データベースにはまったく同じテーブルがありますが、データは異なります。

ユーザー入力に応じてこれらのデータベースを切り替えることができるようにしたいと考えています。TurboGears 2 でそれを行う最もエレガントな方法は何ですか?

4

3 に答える 3

1

ジェリル、

TG2 で複数のデータベースを使用することについて、しばらく前にブログ投稿を書きました。この方法を複数の DBSession に関する Jorge の提案と組み合わせることができます。これは簡単に実行できると思います。

TurboGears 2.0 で複数のデータベースを使用する方法

これが役に立てば幸いです、セス

于 2009-09-10T06:13:53.840 に答える
1

すべてのデータベースが同じスキーマを持っている場合、異なる DB に対して同じモデルを使用して複数のセッションを作成できるはずです。

于 2009-09-07T00:56:50.983 に答える
1

読み取り専用アプリケーションに 2 つのデータベースを使用しています。2 番目のデータベースは、プライマリ データベースがダウンした場合のキャッシュです。接続、メタデータ、および互換性のあるTableインスタンスを保持するために、2 つのオブジェクトを使用します。db = primaryビュー関数の先頭はorを割り当てdb = secondary、残りは単に に対するクエリですdb.tableA.join(db.tableB)。私はORMを使用していません。

スキーマは厳密には同一ではありません。プライマリ データベースにはschema.プレフィックス ( Table(...schema='schema')) が必要ですが、キャッシュ データベースには必要ありません。これを回避するために、スキーマ名を引数として受け取る関数でテーブル オブジェクトを作成します。この関数をデータベースごとに 1 回呼び出すことで、互換性のあるプレフィックス付きオブジェクトとプレフィックスなしTableオブジェクトを取得できます。

少なくとも Pylons では、SQLAlchemymeta.SessionScopedSession. アプリケーションは、各リクエストの後BaseControllerappname/lib/base.py呼び出し中です。Session.remove()両方のデータベースと通信する単一のSessionを用意したほうがよいでしょうが、そうでない場合は、それぞれBaseControllerを呼び出すように を変更する必要があるかもしれません。.remove()Session

于 2009-09-14T17:13:56.230 に答える