[英]In Django, how to control which DB connection and cursor a queryset will use
[英]how to use persistance DB connection in django?
对于每个请求,即使在我的 Django 数据库配置中设置了 CONN_MAX_AGE 变量后,django 也会创建一个新的数据库连接
我的配置 -
python3.5/Django2.05/mysql-5.6
这是我的数据库配置 -
{'default': {
'CONN_MAX_AGE': 500,
'ENGINE': 'django.db.backends.mysql',
'HOST': 'localhost',
'NAME': DB_NAME,
'OPTIONS': {},
'PASSWORD': 'root',
'PORT': '3306',
'TEST': {'CHARSET': None, 'COLLATION': None, 'MIRROR': None,
'NAME': None},
'TIME_ZONE': None,
'USER': 'root'}}
根据文档: Django Documentation ,在 CONN_MAX_AGE 到期之前不应创建新连接。
我通过点击自定义视图的获取请求并通过添加以下语句检查连接 object 来检查 -
from django.db import connections
print (connections.all())
日志显示一个新的连接 object,像这样 -
[INFO 2018-12-04 23:00:08,472 basehttp] "GET /health_check/ HTTP/1.1" 200 96
[<django.db.backends.mysql.base.DatabaseWrapper object at 0x7f2c5fb1a0b8>]
[INFO 2018-12-04 23:00:09,017 basehttp] "GET /health_check/ HTTP/1.1" 200 96
[<django.db.backends.mysql.base.DatabaseWrapper object at 0x7f2c5fa88d30>]
另一个观察结果是——
通过登录内部 -
local/lib/python3.5/site-packages/django/db/backends/mysql/base.py get_new_connection() 正在为每个请求调用,根据我的说法,这不应该发生。
如果 object 名称对日志记录/调试的这种解释是错误的,那么建议我应该如何确保不会在每个请求上创建数据库连接。
PS,我是 django 的新手
我完全同意凯文的回答。 如果您使用 nothreading 参数运行 Django 开发服务器,那么您将在connections.all()
上看到相同的连接 object。
python manage.py runserver --nothreading
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.