Django:如何获得与数据库的新连接

时间:2017-08-14 10:18:30

标签: python mysql django

我已经使用django构建了一个Web服务器。

使用线程运行任务,将客户端发送的数据保存到数据库中。

  while True:
      ...
      try:  
          self.dbTarget, created = ClientMonitor.objects.get_or_create(Machine_code=own_MachC)

          data = self.workQueue.get()  #from client sent

          self.dbTarget.setValue(data) #Custom method assigning
          self.dbTarget.save()         #django ORM
      except InterfaceError as ee:
          pass

该线程长时间运行,但是很长一段时间后它将除了InterfaceError,因为mysql服务器断开连接为8小时超时。

  

特别是它无法自动重新连接到数据库。创建一个新线程就可以,但它会增加资源占用。

所以我想在同一个线程中关闭连接时重新连接db。 Django每个请求都有一个新的连接。

如何在同一个线程中获得与数据库的全新连接? 谢谢!!!

2 个答案:

答案 0 :(得分:1)

只需关闭异常处理程序中的连接即可。下次应用程序尝试与数据库通信时,应建立新连接:

import logging
from django.db import connection

try:  
    self.dbTarget, created = ClientMonitor.objects.get_or_create(Machine_code=own_MachC)
    ...
except InterfaceError as ee:
    logging.warning(ee)    # make sure that you log these events
    connection.close()

答案 1 :(得分:0)

Django本身使用函数close_old_connections()来关闭每个请求开始和结束时超过其生命周期的任何连接。这将检测连接是否早于数据库设置中指定的MAX_AGE,否则无法使用。如果将MAX_AGE设置为低于数据库的超时,则由于db超时,您永远不会遇到InterfaceError

from django.db import close_old_connections

while True:
    try:  
        ...
    finally:
        close_old_connections()