Как узнать текущее имя базы данных в Django?

Я пишу тесты в своем проекте django. На данный момент у меня есть два подключения к базе данных:

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

и пользовательское подключение к 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) 

и я хочу знать, когда мой проект работает

 python manage.py test myapp 

Потому что, когда вы запускаете тесты, 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) 

Но это не работает

9 Solutions collect form web for “Как узнать текущее имя базы данных в Django?”

Попробуйте добавить в файл настроек следующее:

 import sys management_command = sys.argv[1] if len(sys.argv) > 1 else "" TESTING = management_command.startswith("test") 

Если TESTING истинно, вы работаете с python manage.py test myapp.

edit: Возможно, вы могли бы разместить это где угодно, не обязательно свой файл настроек. Дайте ему понять, как это работает!

Чтобы получить имя db с недавними версиями Django (с использованием 1.8):

 from django.db import connection db_name = connection.settings_dict['NAME'] # Or alternatively # db_name = connection.get_connection_params()['db'] 

Помните о том, чтобы прочитать это значение после инициализации, чтобы оно имело правильное значение при выполнении модульных тестов.

Вы можете проверить его в db.settings :

 from django import db db.settings.DATABASES['default']['NAME'] 

Чтобы увидеть базу данных, используемую для получения определенного объекта, вы можете:

 object._state.db 

Это даст вам ключ базы данных в конфигурации, такой как «по умолчанию», поэтому, если у вас есть несколько баз данных в конфигурации, вы можете проверить правильность.

Когда вы запускаете тесты, db.settings необходимо обновить, чтобы содержать имя базы данных, специфичное для теста.

Ответ кажется устаревшим.

В django 1.6 вы можете сделать:

 from django import db print db.connections.databases 

IMO, лучший способ сделать это, – это следующая недокументированная функция django:

 >>> from django.db import connection >>> connection.vendor 'postgresql' or 'sqlite' 

Thx to: https://stackoverflow.com/a/18849255/1237092

Проверено на django 1.9

Войдите в оболочку.

 ./manage.py shell 

Проверьте свои базы данных.

 from django import db db.connections.databases 

В Django> = 1.10 версии

Использование:

 from django.conf import settings db_name = settings.DATABASES['default']['NAME'] 

Что работало отлично для меня (словарь был пуст в моем случае, потому что я использую файл read_default_file в settings.py ) просто выполняет следующий SQL-запрос

 SELECT DATABASE() 

В Django> = 1.11

Использование:

 from django import db db_name = db.utils.settings.DATABASES['default']['NAME'] 
  • Как я могу протестировать программы PySpark?
  • Python - учение против unittest
  • Получить имя текущего теста при настройке с использованием носа
  • Python SQLAlchemy - Смысл метода «desc» атрибута модели
  • Mocking ImportError в Python
  • Python unittest: программировать множественные тесты?
  • Как можно проверить memoized функции?
  • Модуль тестирования приложения python, использующего библиотеку запросов
  • Python - лучший язык программирования в мире.