¿Cómo saber el nombre actual de la base de datos en Django?

Estoy escribiendo pruebas en mi proyecto django. Por ahora, tengo dos conexiones de base de datos:

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

y conexión personalizada a 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) 

y quiero saber cuando mi proyecto se está ejecutando a través

 python manage.py test myapp 

Porque cuando ejecutas pruebas, django crea automáticamente una base de datos separada (con el nombre como test_db_name ), pero en este caso, Mongo aún se ejecutará con db_name . Lo intenté:

 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) 

Pero no funciona

Para obtener el nombre de la base de datos con las versiones recientes de Django (probado con 1.8):

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

Tenga en cuenta la lectura de este valor después de la inicialización, para que tenga el valor correcto al ejecutar pruebas unitarias.

Puedes comprobarlo en db.settings :

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

Para ver la base de datos utilizada para obtener un objeto específico, puede hacerlo:

 object._state.db 

Esto le dará la clave de la base de datos en la configuración, como ‘predeterminado’, por lo que si tiene varias bases de datos en la configuración, puede marcar la correcta.

Cuando ejecute pruebas, db.settings debe actualizarse para que contenga el nombre de la base de datos específica de la prueba.

La respuesta parece ser obsoleta.

En Django 1.6 puedes hacer:

 from django import db print db.connections.databases 

IMO, la mejor manera de hacer esto, es la siguiente función de django no documentada:

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

Gracias a: https://stackoverflow.com/a/18849255/1237092

Probado en Django 1.9

Entra en la concha.

 ./manage.py shell 

Revise sus bases de datos.

 from django import db db.connections.databases 

Intenta poner lo siguiente en tu archivo de configuración:

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

Si la PRUEBA es cierta, se está ejecutando con python manage.py test myapp.

Editar: Probablemente podría poner eso en cualquier lugar, no necesariamente su archivo de configuración. ¡Dale una oportunidad y ve cómo funciona!

En Django> = versión 1.10

Utilizar:

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

Lo que funcionó excelente para mí (el diccionario estaba vacío en mi caso porque estoy usando un archivo read_default_file en settings.py ) simplemente ejecutando la siguiente consulta SQL

 SELECT DATABASE() 

En Django> = 1.11

Utilizar:

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

El uso de la consulta en bruto de mysql a través de django, también puede ser una solución.

 from django.db import connection cursor = connection.cursor() cursor.execute('select database()') row = cursor.fetchone() print row[0]