web-dev-qa-db-ja.com

Djangoのデータベースの現在の名前を知る方法は?

Djangoプロジェクトでテストを書いています。今のところ、2つのデータベース接続があります。

(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)

しかしそれは機能しません

37
Artem Mezhenin

最近のDjangoバージョン(1.8で試した))でデータベース名を取得するには:

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

ユニットテストの実行時に正しい値が得られるように、初期化後にこの値を読み取ることに注意してください。

64
Rems

db.settingsで確認できます。

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

特定のオブジェクトを取得するために使用されるデータベースを確認するには、次のようにします。

object._state.db

これにより、「デフォルト」などの設定でデータベースキーが提供されるため、設定に複数のデータベースがある場合は、正しいデータベースを確認できます。

テストを実行するときは、db.settingsを更新して、テスト固有のデータベース名を含める必要があります。

13
naktinis

答えは時代遅れのようです。

Django 1.6では、次のことができます:

from Django import db
print db.connections.databases
12
Jan DB

Django 1.9でテスト済み

シェルに入ります。

./manage.py Shell

データベースを確認してください。

from Django import db
db.connections.databases
10
Jeff Gu Kang

これを行う最良の方法であるIMOは、次の文書化されていないDjango関数です。

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

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

7
user1237092

以下を設定ファイルに入れてみてください:

import sys

management_command = sys.argv[1] if len(sys.argv) > 1 else ""

TESTING = management_command.startswith("test")

TESTINGがtrueの場合、python manage.py test myapp。

編集:おそらく設定ファイルではなく、どこにでも置くことができます。それを試してみて、それがどのように機能するかを見てください!

2
joshcartme

Django> = 1.10バージョン

使用:

from Django.conf import settings
db_name = settings.DATABASES['default']['NAME']
2
Mohammed Yasin

私にとってはうまくいきました(私はread_default_filesettings.pyファイルを使用しているため、私の場合、辞書は空でした)は、次のSQLクエリを実行するだけです

SELECT DATABASE()
1
g3rv4

Django> = 1.11

使用:

from Django import db
db_name = db.utils.settings.DATABASES['default']['NAME']
1
Juliano Barbosa

Djangoを介してmysqlのrawクエリを使用することも、解決策となります。

from Django.db import connection
cursor = connection.cursor()
cursor.execute('select database()')
row = cursor.fetchone()

print row[0]
0
SuperNova