如何完全拆除数据库连接和会话?

时间:2015-06-16 10:23:04

标签: python mysql postgresql sqlalchemy

根据要求拆除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(),这个配置只是连接池而不是连接(写在文件上) http://docs.sqlalchemy.org/en/latest/core/connections.html

1 个答案:

答案 0 :(得分: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)