Django отправляет запрос None в SQL
У меня есть приложение Django (v2.2.23), подключенное к базе данных MySQL (v5.7). Время от времени, в течение нескольких минут, все мои запросы к БД начинают завершаться с одной из следующих ошибок: "Unknown MySQL Error" (код ошибки 2000), "InterfaceError" или "Malformed Packet" (код ошибки 2027). Ошибки разрешаются сами по себе через несколько минут, но затем снова появляются через некоторое время (в среднем, каждые несколько часов). Эти ошибки возникают как бы случайно, и до сих пор я не нашел надежного способа их воспроизвести. Насколько я могу судить, в коде все в порядке, потому что когда запросы выполняются, они работают, как ожидалось, и дают правильные результаты.
Я уже предпринял несколько безуспешных попыток исправить проблему, включая :-
- Выполнение всех шагов, описанных в этой статье
- Увеличение значений connect_timeout и wait_timeout
- Изменение кодировки, используемой в таблице в моей БД (пробовал latin1 и utf8)
- Обновление пакета Python mysqlclient до последней версии (2.0.3)
Эта ошибка возникает как на локальной, так и на промежуточной среде.
Для дальнейшей отладки я создал пользовательский обработчик исключений и зарегистрировал ошибку, а также последние 3 выполненных SQL-запроса (которые я получил с помощью connection.queries[-3:]
).
Результат приведен ниже:
'EXCEPTION': InterfaceError(0, ''), 'LAST_QUERIES': [{'sql': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', 'time': '0.000'}, {'sql': None, 'time': '0.000'}]
Обратите внимание, что для второго запроса значение 'sql' передается как None. Пытается ли Django выполнить нулевой запрос? Может ли это быть причиной странных, прерывистых ошибок?