50

私は自分の 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)

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

4

11 に答える 11

87

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

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

単体テストを実行するときに正しい値になるように、初期化後にこの値を読み取ることに注意してください。

于 2015-11-30T10:56:11.757 に答える
17

あなたはそれをチェックインすることができますdb.settings

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

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

object._state.db

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

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

于 2013-08-20T19:54:57.343 に答える
16

ジャンゴ1.9でテスト済み

シェルに入ります。

./manage.py shell

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

from django import db
db.connections.databases
于 2016-12-03T07:52:39.917 に答える
13

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

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

ありがとうございます: https://stackoverflow.com/a/18849255/1237092

于 2014-09-23T17:31:22.233 に答える
2

設定ファイルに次を入れてみてください。

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 で実行しています。

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

于 2012-04-11T08:17:40.550 に答える
2

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

SELECT DATABASE()
于 2016-02-04T20:20:03.623 に答える