【发布时间】:2021-11-15 04:24:32
【问题描述】:
SQLAlchemy 利用连接池。这意味着可以在不同的 SQLAlchemy 会话中重用相同的连接。但是,单个 SQLAlchemy 会话包含在其自身中,并在关闭后被丢弃。但是,连接保持“活动”。
我想使用 set_config 将一些内容保存到 Postgresql 中的数据库会话存储中:
PERFORM set_config('session.storage', 'remember-me-across-this-session', false)
现在,这是在数据库会话的范围内。我的问题是:当 SQLAlchemy 使用相同的连接创建一个新的 SQLAlchemy 会话时,这是否也会创建一个新的数据库会话,或者连接会在其生命周期内重复使用相同的数据库会话吗?
注意: 我已经尝试通过将所有相关池大小设置为最小值(max_overflow 0、pool_size 1、pool_recycle 600)然后运行以下脚本(简化)来测试这一点:
print(DBSESSION.execute(text("SELECT set_config('session.storage', 'remember-me-across-this-session', false)")).first())
print(DBSESSION.execute(text("SELECT current_setting('session.storage')")).first())
transaction.commit()
DBSESSION.close()
for _ in range(5):
print(DBSESSION.execute(text("SELECT current_setting('session.storage')")).first())
transaction.commit()
DBSESSION.close()
此测试没有“记住”循环中后续会话的第一行中设置的值,因此确认数据库会话确实在同一连接的 SQLAlchemy 会话之间重置。然而,因为这是逻辑的关键部分,我希望得到第二个意见/肯定,以确保我没有搞砸。
【问题讨论】:
标签: python postgresql session sqlalchemy