繁体   English   中英

如何在 django 中使用持久性 DB 连接?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM