使用 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 应用程序,现在它可以正常运行。
我在 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 应用程序,现在它可以正常运行。