You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLAlchemy复用同一连接创建新Session时是否会重置数据库会话?

SQLAlchemy连接池复用场景下PostgreSQL会话参数有效性说明

你的测试结论完全正确,默认配置下,即使是同一个物理连接被不同SQLAlchemy Session复用,之前设置的数据库会话级参数也不会被保留,效果等价于使用了全新的数据库会话。
核心原理如下:

  • PostgreSQL的会话级配置默认和物理连接绑定,只要物理连接不断开、无主动重置操作,通过set_config设置的会话级参数会一直生效。你调用set_config('session.storage', 'remember-me-across-this-session', false)时第三个参数指定为false,配置的生效范围符合预期。
  • SQLAlchemy连接池默认启用了pool_reset_on_return参数,默认值为reset。当Session关闭将连接归还到连接池时,SQLAlchemy会自动对该连接执行重置操作,PostgreSQL方言下对应的重置语句是DISCARD ALL,该语句会清除当前连接会话内所有自定义配置、临时表、未提交的事务状态等,将连接恢复到刚创建的初始状态,这就是你后续新建的Session读不到之前配置的核心原因。
  • 你的测试逻辑是严谨的:设置pool_size=1、max_overflow=0保证了所有测试用的Session必然复用同一个物理连接,测试结果完全符合SQLAlchemy的默认设计,不存在疏漏。

补充注意:如果手动修改pool_reset_on_return参数为None,关闭连接归还时的重置逻辑,那么同一物理连接复用时,之前的会话配置就会被保留,但该操作会导致不同Session的状态互相污染,极易引发不可预期的业务错误,非特殊场景不建议修改。

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 11:24:05