事务控制¶
自动提交机制¶
v2 版本采用基于 SQL 语句类型的自动提交机制。Result 内部通过 _should_commit() 方法分析 SQL 语句的首关键词,自动判断是否需要执行 COMMIT。
写操作自动提交¶
对于以下写操作关键词,执行后会自动提交:
INSERT、UPDATE、DELETE、REPLACECREATE、ALTER、DROP、TRUNCATE、RENAMEGRANT、REVOKE、LOCK、UNLOCKSET、LOAD、CALL
# 写操作自动提交,无需手动控制
async with engine.execute(
"INSERT INTO users (name) VALUES (%s)", ("张三",)
) as result:
pass # 执行完毕后自动 COMMIT
读操作不提交¶
对于 SELECT 等读操作,不会执行 COMMIT,因为读操作不需要事务提交。
# 读操作不会触发 COMMIT
async with engine.execute("SELECT * FROM users") as result:
data = await result.fetch_all()
流式模式不提交¶
在 stream=True 模式下,即使是写操作也不会自动提交。这是因为流式模式下 COMMIT 会导致流中断。
# 流式查询不会自动提交
async with engine.execute(
"SELECT * FROM large_table",
stream=True
) as result:
async for row in result:
process(row)
连接池配置¶
连接池创建时 autocommit=False 是硬编码的,这意味着:
- 每条连接默认不自动提交
- 事务提交由
Result内部逻辑根据 SQL 类型自动处理 - 无需手动配置
auto_commit参数