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