SQLAlchemy,如何使用ORM和Sessions与连接池?

时间:2016-02-23 23:46:22

标签: python session orm sqlalchemy connection-pooling

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

目前,我们是如何创建会话的:

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)

这似乎有效(应用程序连接到数据库并可以读/写数据库),但我无法判断是否正在使用连接池。我尝试记录连接池代码,但我在控制台上看不到任何内容。但是,我确实看到了由于echo标志设置为True而导致的SQL语句。

我不理解会话和连接池如何协同工作或者当echo_pool设置为True时我没有看到日志语句的原因。

任何帮助将不胜感激,

感谢您

1 个答案:

答案 0 :(得分:1)

引擎处理连接池,默认情况下启用它。

来自documentation

  

在大多数情况下,create_engine()函数返回的引擎具有   集成的QueuePool,预先配置合理的池   默认值。如果您正在阅读本节仅了解如何启用   汇集 - 祝贺!你已经完成了。

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