いくつかのフォーラムから、複数のデータベースのサポートが Django の下位レベルに追加されていることを知りましたが、上位レベルの API はまだ追加されていません。
Django で複数のデータベース接続を実現する方法を教えてください。
Django がいつ複数のデータベース接続を完全に/公式にサポートするか、誰にも分かりますか?
いくつかのフォーラムから、複数のデータベースのサポートが Django の下位レベルに追加されていることを知りましたが、上位レベルの API はまだ追加されていません。
Django で複数のデータベース接続を実現する方法を教えてください。
Django がいつ複数のデータベース接続を完全に/公式にサポートするか、誰にも分かりますか?
単に複数の接続が必要な場合は、次のようにすることができます。
from django.db import load_backend
myBackend = load_backend('postgresql_psycopg2') # or 'mysql', 'sqlite3', 'oracle'
myConnection = myBackend.DatabaseWrapper({
'DATABASE_HOST': '192.168.1.1',
'DATABASE_NAME': 'my_database',
'DATABASE_OPTIONS': {},
'DATABASE_PASSWORD': "",
'DATABASE_PORT': "",
'DATABASE_USER': "my_user",
'TIME_ZONE': "America/New_York",})
# Now we can do all the standard raw sql stuff with myConnection.
myCursor = myConnection.cursor()
myCursor.execute("SELECT COUNT(1) FROM my_table;")
myCursor.fetchone()
これは Django 1.2 に含まれます。
http://docs.djangoproject.com/en/dev/topics/db/multi-db/を参照してください。
私が最近見た議論は、提案:マルチデータベースサポートのためのユーザーフレンドリーなAPI django-developersスレッドでした。これには、元のメッセージでマネージャーを使用して複数のデータベースを使用する1つの方法の例もあります。
django-dev でこのテーマに関する多くの (多数の) スレッドのいくつかを読むと、単純に見えるものはそうではないことがわかります。ユースケースを 1 つだけ選ぶと簡単そうに見えますが、何らかの方法で一般化し始めるとすぐに、問題が発生し始めます。
上記のスレッドを例として使用すると、「複数のデータベース」と言うとき、次のうちどれについて話しているのですか?
必要なもの:
Django のような洗練された ORM の問題の 1 つは、それらの厄介な詳細のすべてが素敵なペイント作業の下に隠されていることです。それを続けながら、上記のいずれかを追加するのは簡単ではありません (tm)。
Eric Florenzanoは、 DjangoのEasyMultipleDatabaseSupportで複数のデータベースをサポートできる非常に優れたブログ投稿を作成しました。
まず、データベース設定を指定できる新しいカスタムマネージャーを作成します。
選択できる複数のデータベース
デフォルトという名前の名前が常に必要です。残りの名前はあなた次第です。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mupltiple_datab_app1',
'USER': 'root',
'PASSWORD': 'admin',
'HOST': "",
'PORT': "",
},
'user1':{
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mupltiple_datab_app2',
'USER': 'root',
'PASSWORD': 'admin',
'HOST': "",
'PORT': "",
},
'user2':{
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mupltiple_datab_app3',
'USER': 'root',
'PASSWORD': 'admin',
'HOST':"" ,
'PORT': "" ,
}
}
1つの特定のデータベースに同期するため
manage.py syncdb --database=user1
クエリ、保存、および削除には「using」ディレクティブがあります
https://docs.djangoproject.com/en/dev/topics/db/multi-db/#manually-selecting-a-database
「生のSQL」に頼る必要があると思います..ちょっと..
ここを見てください:http://docs.djangoproject.com/en/dev/topics/db/sql/
django/db/__init__.py
39行目あたりを見ると、他のデータベースへの「接続」が必要です(私のバージョンでは..)
connection = backend.DatabaseWrapper(**settings.DATABASE_OPTIONS)
そこから試してみてください..
PS私は実際にこれや何かを試したことはありません..あなたの問題を解決できると思うものの一般的な方向を指そうとしているだけです.
Django 1.2 から、複数のデータベースをサポートします。参照: http://docs.djangoproject.com/en/dev/topics/db/multi-db/ バージョン 1.2 は現在ベータ版です
Eric Florenzano のアプローチは、すべてのデータベースが同じエンジンを使用している場合にうまく機能します。異なるエンジン (私の場合は Postgres と MSSQL) を使用している場合、ORM コードの奥深くで多くの問題に遭遇します (デフォルト接続の SQL 構文を使用した models/sql/where.py など)。
これが機能する必要がある場合は、Django 1.2で計画されている Alex Gaynor の MultiDB プロジェクトを待つ必要があります。