【问题标题】:SQLAlchemy, how to use an ORM and Sessions with Connection Pooling?SQLAlchemy,如何使用带有连接池的 ORM 和会话?
【发布时间】:2016-06-06 01:24:14
【问题描述】:

我正在开发一个使用 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 时我看不到日志语句。

任何帮助将不胜感激,

谢谢

【问题讨论】:

    标签: python session orm sqlalchemy connection-pooling


    【解决方案1】:

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

    来自documentation

    create_engine() 函数返回的引擎在大多数情况下都有 一个 QueuePool 集成,预先配置了合理的池 默认值。如果您阅读本节只是为了了解如何启用 池 - 恭喜!你已经完成了。

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

    【讨论】:

    • 更准确地说,Sessions 没有与他们拥有的数据库的连接如果该会话上没有活动的事务
    猜你喜欢
    • 1970-01-01
    • 2021-06-30
    • 2015-01-03
    • 2017-07-17
    • 2010-11-25
    • 1970-01-01
    • 2012-08-16
    • 2022-11-01
    • 2012-07-03
    相关资源
    最近更新 更多