【问题标题】:How to completely teardown database connection and session?如何彻底拆除数据库连接和会话?
【发布时间】:2015-09-01 02:43:28
【问题描述】:
当根据请求拆除 sqlalchemy 连接时,这里是当前代码:
def init_request():
engine = craete_engine(url)
session = sessionmaker(bind=engine, autoflush=False)
def teardown():
session.close()
engine.dispose()
是否应该在 session.close() 之后调用 engine.dispose()?
我不知道 session.close() 真的意味着拆除数据库连接。
但是关于engine.dispose(),这个dispose只是连接池而不是连接(写在文档上)
http://docs.sqlalchemy.org/en/latest/core/connections.html
【问题讨论】:
标签:
python
mysql
postgresql
sqlalchemy
【解决方案1】:
关闭会话会删除所有连接资源并将它们返回到池中,请参阅here。
close() 方法发出一个 expunge_all(),并释放任何
事务/连接资源。当连接返回到
连接池,事务状态也被回滚。
如果您没有做任何额外的事情,create_engine 将建立一个连接池,请参阅here。
create_engine() 函数返回的引擎在大多数情况下都有
一个 QueuePool 集成,预先配置了合理的池
默认值。
如果您想在会话关闭后释放连接(顺便说一下,我想知道为什么?),我建议您禁用池来代替(相同的链接,下面几段);这样您就可以避免每次都创建引擎。
使用 NullPool 禁用池:
from sqlalchemy.pool import NullPool
engine = create_engine(
'postgresql+psycopg2://scott:tiger@localhost/test',
poolclass=NullPool)