Comment connaître le nom actuel de la base de données dans Django?
Je suis en train d'écrire des tests dans mon projet django. Pour l'instant, j'ai deux connexions de base de données:
(settings.py)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'db_name'
...
},
}
et de connexion personnalisée pour 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)
et je veux savoir si mon projet est en cours d'exécution à travers
python manage.py test myapp
Car lorsque vous exécutez des tests, django créer automatiquement séparé DB(avec un nom comme test_db_name), mais dans ce cas, Mongo sera toujours exécuté avec db_name. J'ai essayé:
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)
mais il ne fonctionne pas
source d'informationauteur Artem Mezhenin
Vous devez vous connecter pour publier un commentaire.
Essayer de mettre la ligne suivante dans votre fichier de paramètres:
Si le TEST est vrai que vous êtes en cours d'exécution avec python manage.py test myapp.
edit: Vous avez probablement les placer n'importe où, pas nécessairement votre fichier de paramètres. Donnez-lui un aller et voir comment cela fonctionne!
Pour obtenir le nom db avec les récentes versions de Django (essayé avec 1.8):
Être attentifs à la lecture de cette valeur après l'initialisation, de sorte qu'il a la bonne valeur lors de l'exécution des tests unitaires.
Vous pouvez le vérifier en
db.settings
:De voir la base de données utilisée pour aller chercher un objet spécifique que vous pouvez faire:
Cela vous donnera la clé de base de données dans la configuration, tels que "par défaut", donc si vous avez plusieurs bases de données dans la configuration, vous pouvez vérifier le bon.
Lorsque vous exécutez des tests,
db.settings
doit être mis à jour pour contenir le test spécifique de nom de base de données.La réponse semble être obsolète.
Dans django 1.6 vous pouvez faire:
Testé dans django 1.9
Aller dans le shell.
Vérifier vos bases de données.
De l'OMI, la meilleure façon pour ce faire est la suivante sans-papiers django fonction:
Thx: https://stackoverflow.com/a/18849255/1237092
Ce qui a travaillé excellent pour moi (le dictionnaire est vide dans mon cas parce que je suis en utilisant un
read_default_file
fichier danssettings.py
) est juste à l'exécution de la requête SQL suivanteDans Django >= 1.10 version
Utilisation:
Dans Django >= 1.11
Utilisation:
De l'utilisation de mysql raw requête par le biais de django, peut être aussi une solution.