根据PEP249,Cursor.execute
没有定义的返回值。 但是,pyodbc
似乎使它返回一个游标对象;文档也这么说,尽管相当简短:
执行(...)
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>
也
>>> id(result)
4482830576
>>> id(thing_called_cursor)
4482830576
我可以尝试查看来源,但我宁愿不依赖我在那里找到的任何东西。也许最好忽略Cursor.execute
当前返回的任何内容,因为这样做最符合 PEP 中的规范?
您可以从源代码中看到,最后它最终返回一个return (PyObject*)cur;
,这是首先传递执行的光标。但是,看起来确实存在返回0
的情况。
看起来这也包含在 README.md
中数据库 API 规范未指定 以前版本的 pyodbc (2.0.x) 返回了不同的 值,但 2.1 版本始终返回游标本身。
这允许压缩代码,例如:
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
所以看起来它的理由是提倡紧凑的代码。