使用 Peewee ORM 池连接的正确方法

Proper way to use Peewee ORM Pooled Connection

我在 Python WSGI 网络应用程序中使用 Peewee ORM。我一直在使用 MySQL 服务器 "going away" 时遇到问题,所以我切换到 PooledMySQL 数据库。我仍然会遇到服务器在几个小时后消失的问题..

根据文档,为了获得最佳性能,我必须自己管理连接,方法是调用 .connect() 和 .close()。我根本没有这样做。

我添加了 2 个装饰器,它们在每次请求前后都会被调用,但这是正确的吗?

@pre_save()
def pre_save_handler(sender,instance,created):
    db.connect()
    logger.debug('Attempting to save %s' % instance)

@post_save()
def post_save_handler(sender, instance, created):
    db.close()
    logger.debug('%s was just saved' % instance)

这样做有什么陷阱吗?我应该将 .connect() 和 .close() 移动到我的应用程序中吗?

大多数 WSGI 框架在请求前后为 运行 代码提供某种挂钩。我建议使用这些钩子 connect/close.

查看这些文档:http://docs.peewee-orm.com/en/latest/peewee/database.html#adding-request-hooks

考虑了一两天后,我意识到这是 100% 错误的做法。这对 SELECT 查询根本不起作用。这些函数只能在数据库存储上调用! 我已将预处理器和 post 处理器添加到我的 Web 应用程序,现在它可以正常运行。