Python решение _mysql_exceptions.OperationalError: (2006, «MySQL сервер ушел») при использовании моделей БД - PullRequest
0 голосов
/ 02 марта 2020

Итак, наша python программа работает с этими ошибками _mysql_exceptions.OperationalError: (2006, 'MySQL server has gone away'). Проблема в том, что программа обращается к БД, тогда она много сканирует, чтобы вернуться с результатами после mysql connection timeout ... и тогда уже слишком поздно.

По логам c есть 2 решения

  • увеличение mysql connection timeout, но это не вариант
  • иметь python проверку на открытое соединение, и если закрыто, откройте его снова

Некоторые решения были найдены и звучат ясно возможное решение и здесь о курсорах закрытия и открытия .

Однако мы используем модели из django .. и я не знаю, где реализовать логи c для проверки check for a connection and reconnect of the connectin is lost.

вопрос : Где и как я могу реализовать описанный logi c для повторного подключения к потерянному соединению БД при использовании моделей? (существует ли какое-либо INIT или CONNECT событие для доступа)

Пример кода

from django.db import models

class Domain(models.Model):
    name = models.CharField(max_length=100)
    domain = models.CharField(max_length=100, blank=True, null=True)

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Эта ошибка не может быть исправлена, как вы можете видеть здесь в Django документах для обходного пути, вам просто нужно закрыть соединение, если ваша программа будет простаивать в течение длительного времени .

from django.db import connection
# DO SOMETHING TO THE DATABASE
connection.close()
0 голосов
/ 02 марта 2020

Если вы закроете ваше соединение, django автоматически откроет его, если потребуется запрос к базе данных.

Так что, если вы знаете, что проблема возникает в какой-то функции, независимо от того, является ли просмотр или нет, Вы можете закрыть соединение непосредственно перед или в начале этой функции:

from django.db import connection 
...
connection.close()
...