python - pymysql.err.InterfaceError: (0, '') 对 sql 表进行大量推送时出错
问题描述
我在很短的时间内从使用许多不同线程的python代码(使用pymysql)对mysql表进行了大量插入。
每个线程,其中有很多,最终可能会或可能不会将数据推送到 MySql 表。
这是导致问题的代码块(可以为每个运行的线程调用):
sql = ("INSERT INTO LOCATIONS (location_id, place_name) VALUES (%s, %s)")
cursor = self.connection.cursor()
cursor.execute(sql, (location_id, place_name))
cursor.close()
特别是这一行:
cursor.execute(sql, (location_id, place_name))
这会导致此错误:
pymysql.err.InterfaceError: (0, '')
另请注意,我在上面的块所在的类的 init 中定义了 self.connection。所以所有线程共享一个 self.connection 对象,但获得自己的光标对象。
该错误似乎是随机发生的,并且仅在对 mysql 表进行了多次插入后才开始出现(我认为)。这不是一致的,这意味着每次尝试插入 mysql 时都不会发生这种情况。
我已经用谷歌搜索了这个特定的错误,它似乎可能是在运行查询之前关闭了光标。但我相信很明显我在执行查询后关闭了游标。
现在我认为这是因为:
- MySql 表的某种写入限制,虽然 pymysql.err.InterfaceError 的错误似乎没有具体说这个
- 我在高范围定义了一个连接,该连接从线程中创建了游标,这一事实可能会以某种方式导致此问题。
想法?
解决方案
似乎这个问题与我拥有一个通用连接对象有关。每个线程创建一个似乎已经消除了这个问题。
推荐阅读
- vue.js - 如何使用 Vue 插件 actioncable-vue 更新 Vuex
- android - 一起运行时 Flutter 小部件测试失败
- go - 如何在 Go 中打印?
- r - 如何在汇总数据框中创建一个标识行的列,该行仅包含新数据?
- batch-file - 使用带有源和目标的批处理移动 txt 文件
- javascript - 如何在 JavaScript 中按下按钮之前输出 0 次点击?(点击计数器)
- java - 如何使用 Java 将 Edge Driver (Chromium) 详细日志输出转储到 txt 文件中?
- database - 在具有共享/独占锁的数据库中,当在事务开始时执行 UPDATE 语句时,锁是如何工作的?
- c++ - C++ 查找数组中最大元素的索引,即使有多个最大元素
- express - 第一方移动应用的身份验证方法?