2016-07-12 6 views
4

Djangoシェルで別のデータベースに接続するにはどうしたらいいですか?以下のようなdjangoシェル内の別のデータベースに接続する

何か:

python manage.py shell --database=slave 

は、私はすべての周りグーグルで試してみましたが、これに有益な何かを見つけることができませんでした。

これは私の設定は次のようになります。

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'db1', 
     'USER': 'user', 
     'PASSWORD': 'password', 
     'HOST': '10.10.10.10', 
     'PORT': '', 
     'CONN_MAX_AGE': 1000, 
    }, 
    'slave':{ 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'db2', 
     'USER': 'user', 
     'PASSWORD': 'password', 
     'HOST': '10.10.10.10', 
     'PORT': '', 
     'CONN_MAX_AGE': 1000, 
    }, 
} 

答えて

4

あなたがサブモジュールにして設定モジュールを分割することができます。例えば:

project/ 
    settings/ 
     __init__.py 
     base.py 
     dev.py 
     prod.py 
     shell.py 

あなたの主な/一般的な設定は、開発ではproject/settings/base.py

に配置されている、project.settings.devDJANGO_SETTINGS_MODULE環境変数を設定します。

project/settings/dev.pyは次のようになります。python manage.py shell --settings=project.settings.shellを実行し

from .dev import * 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'db2', 
     'USER': 'user', 
     'PASSWORD': 'password', 
     'HOST': '10.10.10.10', 
     'PORT': '', 
     'CONN_MAX_AGE': 1000, 
    }, 
} 

# OR 
# 
# DATABASES['master'] = DATABASES['default'] 
# DATABASES['default'] = DATABASES['slave'] 

from .base import * 

DEBUG = True 

project/settings/shell.pyは次のように見えるかもしれません。


あるいは、単に第二の設定モジュールを作成します。

project/ 
    settings.py 
    shell_settings.py 

project/shell_settings.py次のようになります。

from .settings import * 

DATABASES['master'] = DATABASES['default'] 
DATABASES['default'] = DATABASES['slave'] 

python manage.py shell --settings=project.shell_settings

4

あなたがusing() ORMのメソッドを使用してクエリでデータベースを選択できます。

# This will hit a model in your default DB: 
Model.objects.using('default').all() 

# And this will hit a model in your slave DB: 
Model.objects.using('slave').all() 
+0

うんを実行し、これが私の中で思いつきました検索を行うことができましたが、私はスレーブに対して多くのクエリを実行する予定でしたので、より良い方法を探していましたそれをやる。もう1つのアプローチは別の設定ファイルを使用することでしたが、これは後で別のスレーブでこれを実行したいので、やや良いアイデアでした。探していたものが直接サポートされているかどうかを確認したいとにかく、感謝と+1。 –

関連する問題