我在Python WSGI网络应用程序中使用Peewee ORM。我一直遇到MySQL服务器“离开”的问题,所以我切换到了PooledMySQLDatabase。几个小时后我仍然会遇到服务器消失的问题..
根据文档,为了获得最佳性能,我必须通过调用.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()移动到我的应用程序中吗?
答案 0 :(得分:1)
大多数WSGI框架为在请求之前和之后运行代码提供了某种钩子。我建议使用这些钩子连接/关闭。
查看以下文档:http://docs.peewee-orm.com/en/latest/peewee/database.html#adding-request-hooks
答案 1 :(得分:0)
在考虑了一两天之后,我意识到这是100%错误的做法。这对于SELECT查询来说根本不起作用。这些函数只在数据库存储上调用! 我已经在我的网络应用中添加了一个前置和后置处理器,现在它正常运行。