【问题标题】:Does SQLAlchemy create threads when not using ORM or connection?SQLAlchemy 在不使用 ORM 或连接时会创建线程吗?
【发布时间】:2012-03-06 12:10:49
【问题描述】:

我们使用 SQLALchemy 仅用于将独立于 DB 的代码转换为 sql 语句(通过编译和显式使用方言)。无论如何,我们没有使用 ORM,也没有通过 create_engine 创建引擎。

我相信以这种方式使用它不会使 SQLA 在后台创建任何线程或数据库连接。这是真的吗?

【问题讨论】:

    标签: sql sqlalchemy


    【解决方案1】:

    SQLAlchemy 不会产生线程,并且会在调用特定操作的线程内执行所有操作。

    您可能会遇到面向同步的怪癖,即使没有产生任何线程,在非常罕见的情况下,特定对象会被 Python 的 GC 清理线程进行垃圾收集。例如,如果您使用 Connection 对象,没有关闭它,然后让它超出范围,如果它恰好被 gc 线程垃圾收集,您可能会看到 DBAPI connection.rollback() 方法在GC,因为 SQLAlchemy 会在垃圾收集器收集连接时清理它们。如果 DBAPI 遇到问题,该问题的解决方案是确保您主动关闭 ConnectionSession 对象等资源。

    【讨论】:

      猜你喜欢
      • 2017-02-26
      • 1970-01-01
      • 2012-03-24
      • 2016-06-06
      • 1970-01-01
      • 2015-12-16
      • 2020-05-10
      • 1970-01-01
      • 2021-08-30
      相关资源
      最近更新 更多