连接到django shell中的其他数据库

mu *_*u 無 4 python django shell

如何在Django shell中连接到不同的数据库?

就像是:

python manage.py shell --database=slave
Run Code Online (Sandbox Code Playgroud)

我试着四处搜索,但找不到任何有用的东西.

这就是我的设置:

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,
    },
}
Run Code Online (Sandbox Code Playgroud)

Goc*_*cht 8

您可以使用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()
Run Code Online (Sandbox Code Playgroud)


Ant*_*ard 6

您可以将设置模块拆分为子模块。例如:

project/
    settings/
        __init__.py
        base.py
        dev.py
        prod.py
        shell.py
Run Code Online (Sandbox Code Playgroud)

您的主要/常用设置位于 project/settings/base.py

在开发中,将DJANGO_SETTINGS_MODULE环境变量设置为project.settings.dev.

project/settings/dev.py 可能看起来像:

from .base import *

DEBUG = True
Run Code Online (Sandbox Code Playgroud)

project/settings/shell.py 可能看起来像:

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']
Run Code Online (Sandbox Code Playgroud)

然后运行python manage.py shell --settings=project.settings.shell


或者,或者,只需创建第二个设置模块:

project/
    settings.py
    shell_settings.py
Run Code Online (Sandbox Code Playgroud)

project/shell_settings.py 看起来像:

from .settings import *

DATABASES['master'] = DATABASES['default']
DATABASES['default'] = DATABASES['slave']
Run Code Online (Sandbox Code Playgroud)

并运行 python manage.py shell --settings=project.shell_settings