SQLAlchemy,如何使用ORM和带连接池的会话?

4

我正在开发一个使用SQLAlchemy ORM库的Pyramid应用程序,因此我们使用会话(sessions)。但是,我不清楚会话和连接池如何协同工作,或者在使用会话时是否需要连接池。

目前,这是我们创建会话的方式:

engine = create_engine(connection_string)
Session = sessionmaker(bind=engine)

我已经修改了引擎创建过程,添加了连接池:

pooled_engine = create_engine(connection_string, pool_size=20, max_overflow=5,echo=True, echo_pool=True)
Session = sessionmaker(bind=pooled_engine)

这似乎可行(应用程序可以连接到数据库并读写数据库),但我无法确定是否正在使用连接池。我尝试记录连接池代码,但控制台上没有看到任何内容。但我确实看到了SQL语句,这是因为将echo标志设置为True。

我不明白会话和连接池如何一起工作或者为什么在将echo_pool设置为True时我没有看到日志语句。

感谢您的帮助。

1个回答

2

引擎处理连接池,并默认启用。

文档中可以得知:

在大多数情况下,create_engine()函数返回的引擎已经集成了QueuePool,并预先配置了合理的池默认值。如果你只是想学习如何启用连接池-恭喜!你已经完成了。

我认为Session对象并不对应数据库会话。相反,它们是ORM会话。除非查询或保存到数据库,否则它们实际上甚至没有与数据库建立连接。请注意,我对此不是100%确定,因此如果更了解SQLAlchemy内部的人可以确认或编辑此内容,将不胜感激。


1
更准确地说,如果在该会话上没有活动事务,则“会话”不会持有与数据库的连接。 - univerio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接