我用烧瓶和小便。有时peewee会抛出这个错误
MySQL server has gone away (error(32, 'Broken pipe'))
Peewee数据库连接
db = PooledMySQLDatabase(database,**{
"passwd": password, "user": user,
"max_connections":None,"stale_timeout":None,
"threadlocals" : True
})
@app.before_request
def before_request():
db.connect()
@app.teardown_request
def teardown_request(exception):
db.close()
在mysql错误之后" MySQL服务器已经消失(错误(32,' Broken pipe'))",选择查询工作没有问题,但插入,更新,删除查询不工作。
在插入,更新,删除查询后面(在mysql中),但是peewee会抛出这个错误。
(2006, "MySQL server has gone away (error(32, 'Broken pipe'))")
答案 0 :(得分:5)
peewee文档已经讨论过这个问题,这里是链接:Error 2006: MySQL server has gone away
当MySQL终止空闲数据库连接时,可能会发生此特定错误。这通常发生在未明确管理数据库连接的Web应用程序中。当您的应用程序启动时,会打开一个连接以处理执行的第一个查询,并且由于该连接从未关闭,因此它将保持打开状态,等待更多查询。
因此,您在管理数据库连接时遇到一些问题。
由于我无法重现您的问题,请试试这个,以这种方式关闭您的数据库:
@app.teardown_appcontext
def close_database(error):
db.close()
您可以从文档中获取一些信息:Step 3: Database Connections
答案 1 :(得分:3)
我知道这是一个老问题,但由于没有接受的答案我以为我会加两分钱。
我在Peewee对象中提交大量数据时遇到了同样的问题(默认情况下,大于MySQL在单次提交中允许的数据量)。我通过更改my.conf中的max_allowed_packet大小来修复它。
要执行此操作,请打开my.conf,在[mysqld]
下添加以下行:
max_allowed_packet=50M
...或您需要的任何大小并重新启动mysqld
答案 2 :(得分:0)
我知道这是一个古老的问题,但是我也以另一种有趣的方式解决了这个问题。就我而言,这是一个insert_many
,它太大了。
要对其进行修复,只需按in the peewee documentation