django.db.utils.InterfaceError: (0, '') - PullRequest
0 голосов
/ 08 ноября 2018

Я недавно внедрил django в инструмент, который разрабатываю. При выполнении некоторых тестов я получаю ошибку django.db.utils.InterfaceError: (0, ''). Я читал, что это может быть проблема с глобальным курсором, однако я делаю запросы только через django, позволяя ему обрабатывать курсоры.

В основном у меня есть информация о соединениях, которые я сохраняю в mySQL в течение нескольких моментов выполнения инструмента.

Этот конкретный фрагмент кода будет выполняться несколько раз (что пока работает нормально), а затем будет выполнен в последний раз в конце выполнения (глобальное сохранение). Именно в этом глобальном сохранении я получаю вышеупомянутую ошибку. Это глобальное сохранение просто повторяет все собранные соединения и сохраняет их.

Любые идеи о том, что я могу сделать, чтобы решить эту ошибку?

def save_to_SQL_db(self):
    #####COMPOUND#####
    if not self.sql_key:
        cpd_django=Compound_db(cpd_level=self.get_cpd_level(),\
                               chemical_formula=self.get_Chemical_formula(),\
                               smiles=self.get_SMILES())
    else:
        cpd_django=Compound_db.objects.get(pk=self.sql_key)
        cpd_django.cpd_level=self.get_cpd_level()
        cpd_django.chemical_formula=self.get_Chemical_formula()
        cpd_django.smiles=self.get_SMILES()
    cpd_django.save()

Ошибка:

Traceback (последний вызов был последним): File "Пользователь \ AppData \ Local \ Programs \ Python \ Python37-32 \ Lib \ сайт-пакеты \ Джанго \ DB \ движки \ utils.py", строка 85, в _execute return self.cursor.execute (sql, params) Файл "user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ mysql \ base.py", строка 71, в исполнении return self.cursor.execute (query, args) Файл "user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ pymysql \ cursors.py", строка 170, в исполнении result = self._query (query) Файл "user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ pymysql \ cursors.py", строка 328, в _query conn.query (q) Файл "user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ pymysql \ connections.py", строка 515, в запросе self._execute_command (COMMAND.COM_QUERY, sql) Файл "user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ pymysql \ connections.py", строка 745, в _execute_command поднять err.InterfaceError ("(0, '')") pymysql.err.InterfaceError: (0, '')

Вышеуказанное исключение было прямой причиной следующего исключения:

Traceback (последний вызов был последним): File «MyProject / Query.py», строка 1900, в файл «MyProject / Query.py», строка 1803, в Файл многократного запроса «MyProject / Query.py», строка 1836, в Файл single_query «MyProject / Query.py», строка 1563, в query_all_databases self.database_saving_all () Файл "MyProject / Query.py", строка 243, в database_saving_all self.database_saving_mets () Файл "MyProject / Query.py", строка 519, в database_saving_mets met.save_to_SQL_db () Файл "MyProject \ Compound.py", строка 829, в save_to_SQL_db еще: Файл "user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ models \ manager.py", строка 82, в manager_method return getattr (self.get_queryset (), name) (* args, ** kwargs) Файл "user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ models \ query.py », строка 393, в get num = len (клон) Файл "user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ models \ query.py", строка 250, в len self._fetch_all () Файл "user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ models \ query.py", строка 1186, в _fetch_all self._result_cache = list (self._iterable_class (self)) Файл "user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ models \ query.py", строка 54, в iter файл результатов = compiler.execute_sql (chunked_fetch = self.chunked_fetch, chunk_size = self.chunk_size) "Пользователь \ AppData \ Local \ Programs \ Python \ Python37-32 \ Lib \ сайт-пакеты \ Джанго \ DB \ модели \ SQL \ compiler.py", строка 1065, в execute_sql cursor.execute (sql, params) Файл "user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ utils.py", строка 100, в исполнении return super (). execute (sql, params) Файл "user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ utils.py", строка 68, в исполнениивернуть файл self._execute_with_wrappers (sql, params, many = False, executor = self._execute) "Пользователь \ AppData \ Local \ Programs \ Python \ Python37-32 \ Lib \ сайт-пакеты \ Джанго \ DB \ движки \ utils.py", строка 77, в _execute_with_wrappers return executor (sql, params, many, context) Файл "user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ utils.py", строка 85, в _execute return self.cursor.execute (sql, params) Файл "user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ utils.py", линия 89, выход поднять dj_exc_value.with_traceback (traceback) из файла exc_value "user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ utils.py", строка 85, в _execute return self.cursor.execute (sql, params) Файл "user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ mysql \ base.py", строка 71, в исполнении return self.cursor.execute (query, args) Файл "user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ pymysql \ cursors.py", строка 170, в исполнении result = self._query (query) Файл "user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ pymysql \ cursors.py", строка 328, в _query conn.query (q) Файл "user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ pymysql \ connections.py", строка 515, в запросе self._execute_command (COMMAND.COM_QUERY, sql) Файл "user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ pymysql \ connections.py", строка 745, в _execute_command поднять err.InterfaceError ("(0, '')") django.db.utils.InterfaceError: (0, '')

1 Ответ

0 голосов
/ 18 февраля 2019

Я знаю, что это не оптимальный ответ, но для меня попытка 3 раза закрыть соединение, а затем повторное соединение снова сработало.

 try:
     connections.close_all()
 except:
     try:
         connections.close_all()
     except:
         try:
             connections.close_all()
         except:
             pass

Также попытался установить для CONN_MAX_AGE значение None в settings.py, но это не сработало.

...