我正在使用一个使用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时我没有看到日志语句的原因。
任何帮助将不胜感激,
感谢您
答案 0 :(得分:1)
引擎处理连接池,默认情况下启用它。
在大多数情况下,create_engine()函数返回的引擎具有 集成的QueuePool,预先配置合理的池 默认值。如果您正在阅读本节仅了解如何启用 汇集 - 祝贺!你已经完成了。
我认为Session对象与数据库会话不对应。相反,它们是ORM会话。除非他们查询或保存到数据库,否则它们实际上甚至没有与数据库的连接。请注意,我对此并不是100%肯定,所以如果有更多了解SQLAlchemy内部人员的人可以确认或编辑此内容,那将不胜感激。