Peewee MySQL服务器已经消失

时间:2015-12-02 08:40:23

标签: python mysql flask peewee broken-pipe

我用烧瓶和小便。有时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'))")

3 个答案:

答案 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_pa​​cket大小来修复它。

要执行此操作,请打开my.conf,在[mysqld]下添加以下行:

max_allowed_packet=50M

...或您需要的任何大小并重新启动mysqld

答案 2 :(得分:0)

我知道这是一个古老的问题,但是我也以另一种有趣的方式解决了这个问题。就我而言,这是一个insert_many,它太大了。 要对其进行修复,只需按in the peewee documentation

所述进行批量插入