Django プロジェクトで特定のアプリ用に別の SQLite データベースを作成することを検討していました。
ただし、可能であれば直接 SQLite アクセスを使用したくありませんでした。これらのデータベースへの Django スタイルの ORM アクセスが理想的です。
これは可能ですか?
ありがとうございました。
はい - このための低レベル API が用意されています。現時点では、便利な高レベル API が不足しています。これらの引用は、reddit のプログラミングに関する James Bennett (Django のリリース マネージャー) からのものです。
これは、コードベースを見る人向けの非常に低レベルの API で、数か月前から存在しています (すべて
QuerySet
が によってサポートされておりQuery
、DB 接続を引数として受け入れます)。高レベルの文書化された API はありませんが、複数の DB/シャーディング シナリオのようなことを既に行っている人や、行っている人を知っています。...それは必ずしも大きな記事を書く必要があるものではありません。の
__init__()
メソッドは、 のインスタンスであるQuerySet
キーワード引数 を受け入れます。のメソッドは、キーワード引数 を受け入れます。これは、 (DB のバックエンド固有のサブクラス) のインスタンスである必要があります。query
django.db.models.sql.Query
__init__()
Query
connection
django.db.backends.BaseDatabaseWrapper
そこからはとても簡単です。たとえば、
get_query_set()
マネージャをオーバーライドして、必要な接続を使用して常に を返すQuerySet
ようにしたり、シャーディング ロジックなどを設定して、受信したクエリ パラメータに基づいてどの DB を使用するかを決定したりできます。
現在はありません。各プロジェクトは 1 つのデータベースを使用し、すべてのアプリがその中に存在する必要があります。アプリ固有のデータベースが必要な場合、Django ORM を介して行うことはできません。Multiple Database Supportの Django wiki ページを参照してください。
これはまだ可能ではありませんが、ウィキのDjangoのMultipleDatabaseSupportでいくつかの話があります。また、DjangoCon 2008でのDjangoの将来に関する基調講演でも取り上げられ、優先度の高い問題の1つになりました。