Django多数据库,Django是否最初连接所有数据库?

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是类似于字典的对象,允许您使用其别名检索特定连接:

from django.db import connections

cursor = connections['my_db_alias'].cursor()

所以,在这里, 1. connections对象是否包含已经建立的连接?还是只有在请求游标时才进行连接? 2. 是否有一种方法可以更改此默认行为,并按需进行连接(所有查询都作为原始查询,所有数据库都是MySQL)?
2个回答

6

在首次访问时,将使用django.db.connections建立到所请求的数据库的持久连接。也就是说,连接是惰性评估的,只有在第一次使用时才会连接。相关代码位于django/db/__init__.py中的ConnectionHandler类中。

查询后连接不会自动删除,连接将保持连接状态直到断开连接。如果DATABASES中有未被使用的条目,则不会连接到这些数据库。


-1

当没有选择其他数据库时,Django使用别名为default的数据库。如果您没有默认数据库,则需要小心地始终指定要使用的数据库。在您的情况下,您是否不需要默认或auth_db用于用户认证等?

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

SHOW PROCESSLIST

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

请回报你的发现。

1
这是我个人意见下的重新表述问题 :( - DhruvPathak
检查当前打开的连接是到达你的答案最好和最可靠的方法,Dhruv。 - Guddu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接