SQLAlchemy随机错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLAlchemy随机错误相关的知识,希望对你有一定的参考价值。

我正在使用nginx,uwsgi和SQLAlchemy的设置。我最近从SQLObject切换,现在我看到SQLAlchemy出现奇怪的随机错误。例如:

sqlalchemy.exc.ResourceClosedError: This result object does not return rows. It has been closed automatically.

要么:

sqlalchemy.exc.NoSuchColumnError: "Could not locate column in row for column 'module.id'"

这是SQLAlchemy中的一种我不知道的行为吗?它可以与uwsgi中的多个进程/线程相关吗?

我的uwsgi配置文件如下所示:

[uwsgi]
plugins=python
socket = 127.0.0.1:9002
wsgi-file = /thesystem/code/api.py
master = True
processes  = 4
threads = 2
daemonize = /thesystem/logs/uwsgi.log
pidfile = /thesystem/uwsgi.pid
答案

很可能你是在/ system / code / api.py入口点打开连接。

这意味着您的文件描述符将在worker中继承,这不适用于sqlalchemy。

在你的ini配置中添加--lazy-apps(lazy-apps = true),在每个worker中加载/thesystem/code/api.py,而不是在master中加载它然后调用fork()

另一答案

除了接受的答案之外,如果您不想(或不能)更改延迟应用程序的预制,例如,由于内存使用量的增加,或者uwsgi重新加载策略的更改,您只需重新连接到分叉后的数据库:

import uwsgi
def setup_db():
    """ routine that sets up the connection to your database """
    ...

uwsgi.post_fork_hook = setup_db

以上是关于SQLAlchemy随机错误的主要内容,如果未能解决你的问题,请参考以下文章

GAE 中的 SQLAlchemy 'character_set_name' 错误

sqlalchemy——单表操作

回收网格中的错误。无需随机点击即可更改UI

SqlAlchemy + Tornado:在回滚无效事务之前无法重新连接

播放随机声音而不重复

SQLAlchemy 错误 MySQL 服务器已消失