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 使用别名为 default 的数据库。如果您没有默认数据库,则需要注意始终指定要使用的数据库。在您的情况下,您不需要用户身份验证等的默认值或 auth_db 吗?

无论如何,连接应该是按需的,您可以连接到 MYSQL Explorer 并发出以下命令以查看活动连接,然后请求游标并再次检查命令结果并进行比较。命令如下...

SHOW PROCESSLIST

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

请报告您的发现。

于 2013-02-04T19:31:51.683 回答