django.db.utils.InterfaceError: (0, '')

Posted

技术标签:

【中文标题】django.db.utils.InterfaceError: (0, \'\')【英文标题】:django.db.utils.InterfaceError: (0, '')django.db.utils.InterfaceError: (0, '') 【发布时间】:2019-04-11 17:26:09 【问题描述】:

我最近在我正在开发的工具中实现了 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(最近一次调用最后一次):文件 "user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\utils.py", 第 85 行,在 _execute return self.cursor.execute(sql, params) File "user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\mysql\base.py", 第 71 行,在执行中 return self.cursor.execute(query, args) File "user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pymysql\cursors.py", 第 170 行,执行中 结果 = self._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 raise err.InterfaceError("(0, '')") pymysql.err.InterfaceError: (0, '')

上述异常是以下异常的直接原因:

Traceback(最近一次调用最后一次):文件 “MyProject/Query.py”,第 1900 行,在 文件 “MyProject/Query.py”,第 1803 行,在 多个查询文件 “MyProject/Query.py”,第 1836 行,在 单查询文件 “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 中 返回 getattr(self.get_queryset(), name)(*args, **kwargs) 文件 "user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\query.py ", 第 393 行,在获取 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) 文件 "user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\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) 文件 "user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\utils.py", 第 77 行,在 _execute_with_wrappers return executor(sql, params, many, context) File "user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\utils.py", 第 85 行,在 _execute return self.cursor.execute(sql, params) File "user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\utils.py", 第 89 行,在 退出 从 exc_value 文件“user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\utils.py”中提高 dj_exc_value.with_traceback(traceback), 第 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) File "user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pymysql\cursors.py", 第 170 行,执行中 结果 = self._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 raise err.InterfaceError("(0, '')") django.db.utils.InterfaceError: (0, '')

【问题讨论】:

【参考方案1】:

我知道,这不是最佳答案,但对我来说尝试关闭 3 次连接,然后再次重新连接是可行的。

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

还尝试在 settings.py 中将 CONN_MAX_AGE 设置为 None,但这不起作用。

【讨论】:

以上是关于django.db.utils.InterfaceError: (0, '')的主要内容,如果未能解决你的问题,请参考以下文章