根据PEP249,Cursor.execute没有定义的返回值。 pyodbc,然而,似乎使它返回一个游标对象;文档也这么说,虽然相当简短:
execute (...)
C.execute(sql, [params]) --> Cursor
这是否有更详细的保证/记录?
查看身份,返回的对象似乎是完全相同的游标,也许用于链接调用?
>>> 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>
Run Code Online (Sandbox Code Playgroud)
还,
>>> id(result)
4482830576
>>> id(thing_called_cursor)
4482830576
Run Code Online (Sandbox Code Playgroud)
我可以尝试查看来源,但我宁愿不依赖我在那里找到的任何东西。也许最好忽略当前返回的任何内容,Cursor.execute因为这样做最符合 PEP 中的规范?
从源码可以看出,最后它最终会返回一个return (PyObject*)cur;,这是执行首先传递的游标。但是,看起来确实存在返回 的情况0。
看起来这也包含在README.md中
DB API 规范没有指定 Cursor.execute 的返回值。以前版本的 pyodbc (2.0.x) 返回不同的值,但 2.1 版本总是返回 Cursor 本身。
这允许紧凑的代码,例如:
Run Code Online (Sandbox Code Playgroud)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
所以看起来它的原因是提倡紧凑的代码。