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

时间:2016-07-12 14:38:02

标签: python django shell

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

类似的东西:

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,
    },
}

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分:4)

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

[Forms]![frm_RptFilter_Components].[fldAutoSeq] 
[Forms]![frm_RptFilter_Components].[fldAutoSeq2]

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

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

project.settings.dev可能如下所示:

project/settings/dev.py

from .base import * DEBUG = True 可能如下所示:

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']

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

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

project/ settings.py shell_settings.py 看起来像是:

project/shell_settings.py

并运行from .settings import * DATABASES['master'] = DATABASES['default'] DATABASES['default'] = DATABASES['slave']

答案 2 :(得分:1)

您还可以使用connection中的django.db模块来创建/连接到全新的测试数据库。

from django.db import connection
db = connection.creation.create_test_db()

我知道要求的不尽相同,但是在测试时非常有用且快速。它将创建一个新的测试数据库并将您连接到该数据库。我还没有弄清楚如何使用它来连接到现有数据库,但是请继续关注。