5

MySQLのサンプルデータベース構成:

DATABASES = {
    'auth_db': {
        'NAME': 'auth_db',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'mysql_user',
        'PASSWORD': 'swordfish',
    },
    'master': {
        'NAME': 'master',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'mysql_user',
        'PASSWORD': 'spam',
    },
    'slave1': {
        'NAME': 'slave1',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'mysql_user',
        'PASSWORD': 'eggs',
    },
    'slave2': {
        'NAME': 'slave2',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'mysql_user',
        'PASSWORD': 'bacon',
    },
}

一部のデータベースがまったく使用されていない場合でも、Djangoは最初にそれらすべてに接続しますか?例えば。

複数のデータベースで生カーソルを使用する

複数のデータベースを使用している場合は、django.db.connectionsを使用して、特定のデータベースの接続(およびカーソル)を取得できます。django.db.connectionsは辞書のようなオブジェクトで、エイリアスを使用して特定の接続を取得できます。

django.dbからインポート接続

カーソル=接続['my_db_alias']。cursor()

したがって、ここでは、1。接続オブジェクトにはすでに作成された接続が含まれていますか?それとも、カーソルの要求があったときに接続しますか?2.このデフォルトの動作を変更し、オンデマンドで接続を確立する方法はありますか(すべてのクエリは生のクエリとして行われ、すべてのデータベースはMySQLです)。

4

2 に答える 2

6

を使用した最初のアクセス時に、要求されたデータベースへの永続的な接続が確立されますdjango.db.connections。つまり、接続は遅延評価され、最初の使用時にのみ接続されます。関連するコードはdjango/db/__init__.pyクラスにありConnectionHandlerます。

クエリ後に接続が自動的に削除されることはありませんが、接続は切断されるまで保持されます。使用されていないエントリがある場合DATABASES、これらのデータベースへの接続は行われません。

于 2013-02-04T22:31:08.080 に答える
-1

Djangoは、他のデータベースが選択されていない場合、デフォルトのエイリアスでデータベースを使用します。デフォルトのデータベースがない場合は、使用するデータベースを常に指定するように注意する必要があります。あなたの場合、ユーザー認証などのためにデフォルトやauth_dbは必要ありませんか?

いずれの場合も、接続はオンデマンドである必要があります。MYSQLExplorerに接続し、次のコマンドを発行してアクティブな接続を確認し、カーソルを要求してコマンドの結果を再度確認して比較します。コマンドは以下の通りです...

SHOW PROCESSLIST

http://dev.mysql.com/doc/refman/5.1/en/show-processlist.html

調査結果を報告してください。

于 2013-02-04T19:31:51.683 に答える