SqlAlchemy “客户端过多”错误

2 投票
1 回答
1693 浏览
提问于 2025-04-17 08:05

我刚接触Python和Pyramid框架。最近我开始使用SQLSoup来处理我的数据库需求(使用Postgres)。

dbEngine1 = SqlSoup(settings['sqlalchemy.db1.url'])
users = dbEngine1.users.fetchall()

一切运行得很好,不过在使用Pyramid应用一段时间后,我遇到了一个错误信息。我必须强制关闭Pyramid,才能释放所有在Postgres中闲置的连接(大约有50个闲置连接,才会出现下面的异常)。

sorry, too many clients already

我的问题是,怎么才能关闭这些闲置的连接?我尝试添加了一行代码,如下所示,但没有帮助。

dbEngine1 = SqlSoup(settings['sqlalchemy.db1.url'])
users = dbEngine1.users.fetchall()
dbEngine1.engine.connect().close()

有没有SQLAlchemy方面的高手能给点建议?

1 个回答

1

看起来你在每次请求你的Pyramid应用时都创建了一个dbEngine1

要正确使用SqlSoup在网页应用中,你必须使用SA会话。

可以查看这个页面上的“访问会话”部分。

我该如何关闭这个闲置的连接?

SqlSoup和原始的SA一样,使用了连接池,连接池中的每个连接在闲置状态下,直到执行查询时才会被使用。这个连接池只需要创建一次。

撰写回答