错误InterfaceError (0, '') 以及解决

本文介绍了解决在使用Peewee框架时遇到的数据库连接关闭错误的方法。通过调整MySQL配置参数max_allowed_packet来避免因批量插入数据过大而导致的连接关闭问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在项目在使用peewee 的时候遇到该错误,于是上网搜了下对应的错误:

https://stackoverflow.com/questions/6650940/interfaceerror-0

都是说因为关闭了连接对象然后继续去操作数据库。因为peewe使用的是pymysql作为连接,查看了一下源码,做了个小实验。

import pymysql.cursors

# Connect to the database
connection = pymysql.connect(host='ip',
                             user='username',
                             password='password',
                             db='database',
                             charset='utf8',
                             cursorclass=pymysql.cursors.DictCursor)
connection.close()
cursor = connection.cursor()
print cursor.execute("show master status;")
print cursor.fetchall()

从中可以看出,在操作数据库过程中,如果连接对象被关闭,则会造成该错误。但是,在我查看代码后,并没有关闭连接对象的操作。一顿纳闷后,发现了有个批量插入的操作,而mysql使用的还是默认配置。默认的参数max_allowed_packet 是4M,当客户端对服务器传输的包超过这个值则会造成mysql gone away 的错误,所以在使用peewee 中的批量插入insert_many进行了,判断,遇到该错误,则进行减半操作。但是这次错遇到了这个连接关闭的错误,所以还是治本好,直接将该值设置1G,当然前提你的服务器,内存要足够,不然也会造成服务器奔溃的现象。于是该问题久迎刃而解了。

关于max_allowed_packet的说明:https://dev.mysql.com/doc/refman/5.5/en/packet-too-large.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值