如何知道Django中数据库的当前名称?

Art*_*nin 33 python django unit-testing

我正在我的django项目中编写测试.现在,我有两个数据库连接:

(settings.py)
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'db_name'
        ...
    },
}
Run Code Online (Sandbox Code Playgroud)

和MongoDB的自定义连接:

import sys
from pymongo import Connection
from pymongo.errors import ConnectionFailure
try:
    connection = Connection(host="localhost", port=27017)
    db = connection['db_name']
    print "Connected successfully(Mongo, db_name)"
except ConnectionFailure, e:
    sys.stderr.write("Could not connect to MongoDB: %s" % e)
    sys.exit(1)
Run Code Online (Sandbox Code Playgroud)

我想知道我的项目何时开始运行

python manage.py test myapp
Run Code Online (Sandbox Code Playgroud)

因为当您运行测试时,django会自动创建单独的DB(名称类似于test_db_name),但在这种情况下,Mongo仍将使用db_name运行.我试过了:

import sys
from pymongo import Connection
from pymongo.errors import ConnectionFailure
from django.db import connections

try:
    connection = Connection(host="localhost", port=27017)
    db_name = connections['default'].settings_dict['NAME']
    db = connection[db_name]
    print "Connected successfully(Mongo, %s)" % (db_name,)
except ConnectionFailure, e:
    sys.stderr.write("Could not connect to MongoDB: %s" % e)
    sys.exit(1)
Run Code Online (Sandbox Code Playgroud)

但它不起作用

Rem*_*ems 56

要使用最近的Django版本获取db名称(尝试使用1.8):

from django.db import connection
db_name = connection.settings_dict['NAME']
# Or alternatively
# db_name = connection.get_connection_params()['db']
Run Code Online (Sandbox Code Playgroud)

请注意在初始化后读取此值,以便在运行单元测试时它具有正确的值.

  • 它也测试了Django 1.9 (2认同)
  • 同样适用于Django 2.1 (2认同)

nak*_*nis 13

你可以查看db.settings:

from django import db
db.settings.DATABASES['default']['NAME']
Run Code Online (Sandbox Code Playgroud)

要查看用于获取特定对象的数据库,您可以执行以下操作:

object._state.db
Run Code Online (Sandbox Code Playgroud)

这将为您提供配置中的数据库密钥,例如"default",因此如果您在配置中有多个数据库,则可以选中正确的数据库.

运行测试时,db.settings应更新以包含特定于测试的数据库名称.

  • db在django 1.8中没有属性'settings' (14认同)

Jan*_* DB 11

答案似乎已经过时了.

在django 1.6中你可以做到:

from django import db
print db.connections.databases
Run Code Online (Sandbox Code Playgroud)


Jef*_*ang 8

在django 1.9中测试过

进入shell.

./manage.py shell
Run Code Online (Sandbox Code Playgroud)

检查您的数据库.

from django import db
db.connections.databases
Run Code Online (Sandbox Code Playgroud)


小智 7

IMO,最好的方法是使用以下无证的django函数:

>>> from django.db import connection
>>> connection.vendor
'postgresql' or 'sqlite'
Run Code Online (Sandbox Code Playgroud)

请访问:https://stackoverflow.com/a/18849255/1237092