10

いくつかのフォーラムから、複数のデータベースのサポートが Django の下位レベルに追加されていることを知りましたが、上位レベルの API はまだ追加されていません。

Django で複数のデータベース接続を実現する方法を教えてください。

Django がいつ複数のデータベース接続を完全に/公式にサポートするか、誰にも分かりますか?

4

10 に答える 10

9

単に複数の接続が必要な場合は、次のようにすることができます。

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()
于 2009-12-02T21:49:37.590 に答える
6

これは Django 1.2 に含まれます。

http://docs.djangoproject.com/en/dev/topics/db/multi-db/を参照してください。

于 2010-02-17T00:52:00.120 に答える
4

私が最近見た議論は、提案:マルチデータベースサポートのためのユーザーフレンドリーなAPI django-developersスレッドでした。これには、元のメッセージでマネージャーを使用して複数のデータベースを使用する1つの方法の例もあります。

于 2008-11-06T11:35:55.997 に答える
3

django-dev でこのテーマに関する多くの (多数の) スレッドのいくつかを読むと、単純に見えるものはそうではないことがわかります。ユースケースを 1 つだけ選ぶと簡単そうに見えますが、何らかの方法で一般化し始めるとすぐに、問題が発生し始めます。

上記のスレッドを例として使用すると、「複数のデータベース」と言うとき、次のうちどれについて話しているのですか?

  • 同じエンジンの同じマシン上のすべての DB。
  • すべての DB を同じマシンに、異なるエンジン (例: MySQL + PostgreSQL)
  • 異なるマシン上に N 個の読み取り専用スレーブを持つ 1 つのマスター DB。
  • 複数の DB サーバーにまたがるテーブルのシャーディング。

必要なもの:

  • DB 間の外部キー
  • マシンやエンジンをまたがる JOIN
  • などなど

Django のような洗練された ORM の問題の 1 つは、それらの厄介な詳細のすべてが素敵なペイント作業の下に隠されていることです。それを続けながら、上記のいずれかを追加するのは簡単ではありません (tm)。

于 2008-11-07T15:54:37.987 に答える
2

Eric Florenzanoは、 DjangoのEasyMultipleDatabaseSupportで複数のデータベースをサポートできる非常に優れたブログ投稿を作成しました。

まず、データベース設定を指定できる新しいカスタムマネージャーを作成します。

于 2009-06-15T16:46:56.760 に答える
1

選択できる複数のデータベース

デフォルトという名前の名前が常に必要です。残りの名前はあなた次第です。

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
于 2013-01-30T12:49:34.340 に答える
1

クエリ、保存、および削除には「using」ディレクティブがあります

https://docs.djangoproject.com/en/dev/topics/db/multi-db/#manually-selecting-a-database

于 2011-12-16T19:33:51.857 に答える
0

「生のSQL」に頼る必要があると思います..ちょっと..
ここを見てください:http://docs.djangoproject.com/en/dev/topics/db/sql/

django/db/__init__.py39行目あたりを見ると、他のデータベースへの「接続」が必要です(私のバージョンでは..)

connection = backend.DatabaseWrapper(**settings.DATABASE_OPTIONS)

そこから試してみてください..
PS私は実際にこれや何かを試したことはありません..あなたの問題を解決できると思うものの一般的な方向を指そうとしているだけです.

于 2008-11-07T04:08:19.143 に答える
0

Django 1.2 から、複数のデータベースをサポートします。参照: http://docs.djangoproject.com/en/dev/topics/db/multi-db/ バージョン 1.2 は現在ベータ版です

于 2010-04-06T10:00:48.647 に答える
0

Eric Florenzano のアプローチは、すべてのデータベースが同じエンジンを使用している場合にうまく機能します。異なるエンジン (私の場合は Postgres と MSSQL) を使用している場合、ORM コードの奥深くで多くの問題に遭遇します (デフォルト接続の SQL 構文を使用した models/sql/where.py など)。

これが機能する必要がある場合は、Django 1.2で計画されている Alex Gaynor の MultiDB プロジェクトを待つ必要があります。

于 2009-08-17T12:37:13.890 に答える