pyodbc 的“Cursor.execute”返回了哪个游标对象?

Which cursor object is pyodbc's `Cursor.execute` returning?

根据 PEP249Cursor.execute 没有定义的 return 值。然而,pyodbc 似乎使它成为 return 游标对象;文档也这么说,尽管相当简短:

execute(...)
C.execute(sql, [params]) --> Cursor

这里 guaranteed/documented 有更详细的地方吗?

查看身份,对象 returned 似乎是完全相同的游标,可能用于链接调用?

>>> thing_called_cursor = conn.cursor()
>>> result = thing_called_cursor.execute("SELECT * FROM Item")
>>> result
<pyodbc.Cursor object at 0x10b3290f0>
>>> thing_called_cursor
<pyodbc.Cursor object at 0x10b3290f0>

此外,

>>> id(result)
4482830576
>>> id(thing_called_cursor)
4482830576

我可以尝试查看资源,但我不想依赖在那里找到的任何东西。也许最好忽略 Cursor.execute 当前正在 return 编辑的任何内容,因为这样做最符合 PEP 中的规范?

你可以从 source 中看到,最后它最终 returns 一个 return (PyObject*)cur; 是第一个执行的游标。但是,看起来确实存在 returns 0.

的情况

README.md 似乎也涵盖了这一点

The DB API specification does not specify the return value of Cursor.execute. Previous versions of pyodbc (2.0.x) returned different values, but the 2.1 versions always return the Cursor itself.

This allows for compact code such as:

for row in cursor.execute("select album_id, photo_id from photos where user_id=1"):
    print row.album_id, row.photo_id

row  = cursor.execute("select * from tmp").fetchone()
rows = cursor.execute("select * from tmp").fetchall()

count = cursor.execute("update photos set processed=1 where user_id=1").rowcount
count = cursor.execute("delete from photos where user_id=1").rowcount

所以看起来它的原因是提倡代码紧凑。