Python pymysql.err.InternalError:数据包序列号错误

Python pymysql.err.InternalError:数据包序列号错误,python,mysql,python-2.7,Python,Mysql,Python 2.7,我正在使用Python2.7和pymysql模块从MySQL数据库中提取数据。当我执行以下代码选择数据时,我一直在底部看到错误。执行查询后出现错误: conn = pms.connect(Host,User,Pwd,DB) with conn: cur = conn.cursor() # Create cursor to interact with MySQL cur.execute(query) 其中,查询是: SELECT Time,var1,var2,var3 FRO

我正在使用Python2.7和pymysql模块从MySQL数据库中提取数据。当我执行以下代码选择数据时,我一直在底部看到错误。执行查询后出现错误:

conn = pms.connect(Host,User,Pwd,DB)
with conn:
    cur = conn.cursor()  # Create cursor to interact with MySQL
    cur.execute(query)
其中,查询是:

SELECT  Time,var1,var2,var3 FROM tableName WHERE Time BETWEEN '2017-02-08 00:00:00' AND '2017-02-15 00:00:00'
我很高兴发布更多的代码,但它非常大,所以最好先尝试缩小可能导致问题的原因

只有当我试图从数千万行中提取大量数据时,才会出现这个问题。在本例中,我从100 Hz采样率数据中提取4个变量,包括时间。数据库表中的主键是时间

仅供参考:我能够在同一时间段内使用COUNT命令对MySQL执行类似的请求,没有错误:

SELECT COUNT(Time) FROM tableName WHERE Time BETWEEN '2017-02-08 00:00:00' AND '2017-02-15 00:00:00'
理论1:从google对这个问题的结果来看,我怀疑这可能是由于我使用GUI而引起的与线程相关的问题。但是我没有意识到在这个程序中创建任何线程。话虽如此,我正在边走边学习,可能对此很幼稚

理论2:另一个怀疑是,当文件大小超过阈值限制时,从MySQL读取数据的方式会发生变化。根据谷歌搜索问题,可能创建了新的线程/连接来处理请求,并且由于pymysql的Threadsafety值1的限制而发生错误

问题:连接会在15分钟后超时吗

要点:

如果我在MySQL命令提示符中键入MySQL查询,它就可以正常工作 该代码适用于100万或200万行的小数据集 当我开始提取数千万行或更多行的较大数据集时,就会发生错误 错误不会立即发生,线路将运行,错误可能在15分钟后发生 我能够对mysql执行类似的请求,就像对大数据集进行计数一样,没有错误 该代码构成tkinter GUI的一部分 在整个代码中,我打开和关闭与数据库的连接几次,始终使用“with conn”语句,以便在完成时关闭数据库。 当从其他表中提取大量数据时,如果只有2个变量,或者最多有150个变量,我也会遇到同样的错误。 错误信息:下面是关于您的信息的完整错误。感谢您抽出时间阅读此文章

Traceback (most recent call last):
  File "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 2017.1\helpers\pydev\pydevd.py", line 1578, in <module>
    globals = debugger.run(setup['file'], None, None, is_module)
  File "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 2017.1\helpers\pydev\pydevd.py", line 1015, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "M:/HKerr/python/DBread/DBread_27_v2/DBread_27.py", line 108, in <module>
    TimeB.strftime("%Y-%m-%d %H:%M:%S"),Columns,Host)
  File "M:/HKerr/python/DBread/DBread_27_v2\DBread_mdl_27.py", line 222, in MySQLread
    count+=1
  File "C:\Python27\lib\site-packages\pymysql\connections.py", line 842, in __exit__
    self.rollback()
  File "C:\Python27\lib\site-packages\pymysql\connections.py", line 793, in rollback
    self._read_ok_packet()
  File "C:\Python27\lib\site-packages\pymysql\connections.py", line 767, in _read_ok_packet
    pkt = self._read_packet()
  File "C:\Python27\lib\site-packages\pymysql\connections.py", line 1001, in _read_packet
    % (packet_number, self._next_seq_id))
pymysql.err.InternalError: Packet sequence number wrong - got 185 expected 1

您的连接似乎过早关闭:为了测试这一理论:从代码中删除会话关闭,并关注数据库中的进程列表。嘿@Norbert van Nobelen。谢谢我只是和康恩一起出去了,这样康恩就不会关门了,我收到了一份备忘录。我的印象是,使用conn:,只有在“cur.execute”完成后,我的连接才会关闭,但有些事情发生了变化!但是,如果问题是我以某种方式关闭了连接,为什么它适用于小文件大小?正在进行,但我的执行查询仍然没有完成!我在MySQL中监视processlist,并使用两个版本的代码将查询发送到MySQL。有什么想法吗?再次感谢。在遇到内存问题之前,查询是否保持活动状态?内存问题只是告诉我,您需要管理/分割数据,即:从游标/数据生命周期中取出数据后处理数据的方式app@NorbertvanNobelen. 是的,这个问题仍然存在。关于Mwmori的问题,我解决了。我不知怎的在这台计算机上使用了32位python!所以我切换到64位,并设法提取了2亿行4个变量。代码使用了太多的RAM!!但它是有效的。我需要以某种方式优化内存使用,这是另一个主题。关于包序列问题,我不明白为什么去掉with改变了什么。我肯定没有正确理解这些陈述。如果你有什么建议,我很乐意听听,否则,谢谢你的帮助!我说:with部分在python中遇到了一个bug