【问题标题】: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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-22
      • 2017-03-07
      • 1970-01-01
      • 2011-07-28
      • 2016-05-31
      • 1970-01-01
      • 2020-07-05
      • 2021-10-01
      相关资源
      最近更新 更多