You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

sqlite3.execute返回值是否始终为self?能否安全返回或链式调用?

好问题!我来帮你把这个点讲清楚:

关于sqlite3中execute()返回值的说明

首先得区分两种常见的execute()调用场景,它们的返回值是不一样的:

1. 连接对象(Connection)的execute()

当你调用some_connection_obj.execute(...)时,这个方法不会返回连接对象本身。它会悄悄创建一个新的游标(Cursor)对象,执行完SQL语句后,返回的就是这个Cursor实例。

举个实际的例子:

import sqlite3
conn = sqlite3.connect(':memory:')
result = conn.execute("CREATE TABLE test (id INTEGER)")
print(type(result))  # 输出: <class 'sqlite3.Cursor'>

所以如果你返回conn.execute(...)的结果,拿到的是游标,不是连接对象——这时候你没法链式调用连接的方法(比如commit()),因为游标没有这些方法,但你可以用它来做游标相关的操作,比如获取查询结果。

2. 游标对象(Cursor)的execute()

而游标对象的execute()方法,返回的就是游标自己(self),所以完全可以安全地做链式调用,比如:

cursor = conn.cursor()
# 链式调用两次execute,插入两条数据
cursor.execute("INSERT INTO test VALUES (1)").execute("INSERT INTO test VALUES (2)")

这种写法是完全合法的,因为每次execute()都返回游标实例本身,能接着调用下一个execute()。

总结一下

  • 连接对象的execute()返回Cursor实例,不是自身,不能用来链式调用连接的方法,但可以用返回的Cursor做后续数据操作。
  • 游标对象的execute()返回自身,支持链式调用。

其实Python官方文档里,Connection.execute的描述里明确提到了返回Cursor对象,只是可能你没注意到;而Cursor.execute的设计遵循了Python里常见的“返回self支持链式调用”的模式,文档里虽然没直白写,但示例和实际行为都能验证这一点。

内容的提问来源于stack exchange,提问作者apple apple

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:50:19