pymysql.err.InterfaceError: (0, '') error when doing a lot of pushes to sql table
pymysql.err.InterfaceError: (0, '') error when doing a lot of pushes to sql table
我在短时间内从 python 代码(使用 pymysql)对 mysql table 做了很多插入操作不同的线程。
每个线程,其中有很多,可能会也可能不会最终将数据推送到 MySql table。
这是导致问题的代码块(每个线程都可以调用这个 运行):
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, '')
另请注意,我在上面块所在的 class 的初始化中定义了 self.connection。因此所有线程共享一个 self.connection 对象,但得到它们自己的游标对象。
这个错误似乎是随机发生的,并且只有在 mysql table 中插入了很多次之后才开始出现(我认为)。它不一致意味着它不会在每次尝试插入 mysql.
时发生
我用谷歌搜索了这个特定的错误,看起来它可能是由于游标在 运行 查询之前被关闭所致。但我相信很明显我在执行查询后关闭游标。
现在我认为这是因为:
- 对 MySql table 的某种写限制,尽管 pymysql.err.InterfaceError 的错误似乎没有具体说明
- 事实上,我有一个在高范围内定义的连接,它具有从线程中创建的游标,这可能以某种方式导致了这个问题。
想法?
这个问题似乎与我拥有通用连接对象有关。每个线程创建一个似乎已经解决了这个问题。
我遇到了同样的问题。我的项目代码中有一个全局连接,我发现如果长时间没有mysql操作,这个连接就会超时。由于连接超时,执行 sql 任务时会出现此错误。
我的解决方案是:在执行 sql 任务之前重新连接 mysql。
sql = ("INSERT INTO LOCATIONS (location_id, place_name) VALUES (%s, %s)")
self.connnection.ping() # reconnecting mysql
with self.connection.cursor() as cursor:
cursor.execute(sql, (location_id, place_name))
不要关闭连接删除 cursor.close() 行应该继续更新您的数据库
我遇到了同样的错误,比我发现 pymysql 是线程安全的,所以你需要像@sometimesiwritecode 所说的那样为每个线程打开一个连接。
我在短时间内从 python 代码(使用 pymysql)对 mysql table 做了很多插入操作不同的线程。
每个线程,其中有很多,可能会也可能不会最终将数据推送到 MySql table。
这是导致问题的代码块(每个线程都可以调用这个 运行):
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, '')
另请注意,我在上面块所在的 class 的初始化中定义了 self.connection。因此所有线程共享一个 self.connection 对象,但得到它们自己的游标对象。
这个错误似乎是随机发生的,并且只有在 mysql table 中插入了很多次之后才开始出现(我认为)。它不一致意味着它不会在每次尝试插入 mysql.
时发生我用谷歌搜索了这个特定的错误,看起来它可能是由于游标在 运行 查询之前被关闭所致。但我相信很明显我在执行查询后关闭游标。
现在我认为这是因为:
- 对 MySql table 的某种写限制,尽管 pymysql.err.InterfaceError 的错误似乎没有具体说明
- 事实上,我有一个在高范围内定义的连接,它具有从线程中创建的游标,这可能以某种方式导致了这个问题。
想法?
这个问题似乎与我拥有通用连接对象有关。每个线程创建一个似乎已经解决了这个问题。
我遇到了同样的问题。我的项目代码中有一个全局连接,我发现如果长时间没有mysql操作,这个连接就会超时。由于连接超时,执行 sql 任务时会出现此错误。
我的解决方案是:在执行 sql 任务之前重新连接 mysql。
sql = ("INSERT INTO LOCATIONS (location_id, place_name) VALUES (%s, %s)")
self.connnection.ping() # reconnecting mysql
with self.connection.cursor() as cursor:
cursor.execute(sql, (location_id, place_name))
不要关闭连接删除 cursor.close() 行应该继续更新您的数据库
我遇到了同样的错误,比我发现 pymysql 是线程安全的,所以你需要像@sometimesiwritecode 所说的那样为每个线程打开一个连接。