Django数据库连接丢失问题的解决方法
查询mysql全局变量SHOW GLOBAL VARIABLES;可以看到wait_timeout,此变量表示连接空闲时间。如果客户端使用一个连接查询多次数据库,如果连续查询则没有问题,如果查询几次后停顿超过wait_timeout后再次查询就会出现数据库连接丢失。下面用Django复现下次问题:将mysql的wait_timeout设置为10秒,然后进入django shell模拟查询。django为了减少不必要的数据库连接、关闭,复用了数据库连接,当开始一个请求后建立一个连接池存放连接,之后此次请求都复用一个连接。一般情况不会出现此类问题,因为一个请求中不间断进行数据库查询,无需每个请求调用此方法,杞人忧天。有时候一个请求中数据量较大,会查询数据库后进行一段时间其他处理,比如先查询一些数据,然后将数据处理、生成excel、保存文件并生成url。
下载地址
用户评论