我最近在正在开发的工具中实现了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()
错误:
回溯(最近通话最近):文件 “ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ utils.py”, _execute中的第85行 返回self.cursor.execute(sql,params)文件“ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ mysql \ base.py”, 第71行,执行 返回self.cursor.execute(query,args)文件“ 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”, _query中的第328行 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”, _execute_command中的第745行 引发err.InterfaceError(“(0,'')”)pymysql.err.InterfaceError:(0,))
上述异常是以下异常的直接原因:
回溯(最近通话最近):文件 在第1900行中的“ MyProject / Query.py” 文件 在“ MyProject / Query.py”行1803中 multiple_query文件 第1836行的“ MyProject / Query.py”在 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中 else:文件“ 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(clone)文件“ 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”, _fetch_all中的第1186行 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 结果= editor.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行,在执行中 返回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中 返回执行程序(sql,params,许多,上下文)文件“ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ utils.py”, _execute中的第85行 返回self.cursor.execute(sql,params)文件“ 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), _execute中的第85行 返回self.cursor.execute(sql,params)文件“ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ mysql \ base.py”, 第71行,执行 返回self.cursor.execute(query,args)文件“ 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”, _query中的第328行 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”, _execute_command中的第745行 提高err.InterfaceError(“(0,'')”)django.db.utils.InterfaceError:(0,))
答案 0 :(得分:0)
我知道,这不是最佳答案,但是对我来说,尝试关闭3次连接,然后再次重新连接是可行的。
try:
connections.close_all()
except:
try:
connections.close_all()
except:
try:
connections.close_all()
except:
pass
还尝试在settings.py中将CONN_MAX_AGE设置为None,但这不起作用。