Как я могу проверить запрос Django к базе данных? - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть управляющая команда, запущенная на экземпляре EC2, которая завершается неудачно при попытке выполнить запросы ORM следующим образом:

  File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 53, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py", line 899, in execute_sql
    raise original_exception
OperationalError: SSL connection has been closed unexpectedly

Я могу подключиться к той же базе данных просто отлично с django-admin shell_plus на той же instance.

Чтобы диагностировать это, я хотел бы проверить параметры запроса соединения, который Django делает в каждом случае, чтобы увидеть, что отличается, но после небольшого поиска в источнике Django Казалось, лучше спросить, как вместо того, чтобы потеряться в сорняках на несколько часов:)

альтернативные стратегии диагностики этого также приветствуются!

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Я докопался до этого: проблема заключалась в том, что эта команда управления была демонизирована, соединения с БД не выдерживают fork (), а Django недостаточно умен, чтобы заметить, поэтому он пытается использовать мертвую соединение и разрывы.

Решение

from django.db import close_old_connections

class Daemon():
    def start()
        self.daemonize()
        close_old_connections()
0 голосов
/ 04 февраля 2020

В соответствии с документацией о ведении журнала запросов к базе данных , вы должны искать в файлах журналов своей базы данных:

Это ведение журнала не включает инициализацию на уровне платформы (например, SET TIMEZONE) или запросы управления транзакциями (например, BEGIN, COMMIT и ROLLBACK). Включите ведение журнала запросов в своей базе данных, если вы хотите sh, чтобы просмотреть все запросы к базе данных.

...