【发布时间】:2012-03-06 12:10:49
【问题描述】:
我们使用 SQLALchemy 仅用于将独立于 DB 的代码转换为 sql 语句(通过编译和显式使用方言)。无论如何,我们没有使用 ORM,也没有通过 create_engine 创建引擎。
我相信以这种方式使用它不会使 SQLA 在后台创建任何线程或数据库连接。这是真的吗?
【问题讨论】:
标签: sql sqlalchemy
我们使用 SQLALchemy 仅用于将独立于 DB 的代码转换为 sql 语句(通过编译和显式使用方言)。无论如何,我们没有使用 ORM,也没有通过 create_engine 创建引擎。
我相信以这种方式使用它不会使 SQLA 在后台创建任何线程或数据库连接。这是真的吗?
【问题讨论】:
标签: sql sqlalchemy
SQLAlchemy 不会产生线程,并且会在调用特定操作的线程内执行所有操作。
您可能会遇到面向同步的怪癖,即使没有产生任何线程,在非常罕见的情况下,特定对象会被 Python 的 GC 清理线程进行垃圾收集。例如,如果您使用 Connection 对象,没有关闭它,然后让它超出范围,如果它恰好被 gc 线程垃圾收集,您可能会看到 DBAPI connection.rollback() 方法在GC,因为 SQLAlchemy 会在垃圾收集器收集连接时清理它们。如果 DBAPI 遇到问题,该问题的解决方案是确保您主动关闭 Connection 和 Session 对象等资源。
【讨论】: