根据PEP249,Cursor.execute
没有定义的返回值。但是,pyodbc
似乎使它返回一个游标对象;文档也这样说,虽然相当简短:
执行(...)
C.execute(sql,[params]) - >光标
这是保证/记录在哪里更详细?
查看身份,返回的对象看起来是同一个游标,也许是为了链接调用?
>>> 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中的规范?
答案 0 :(得分:4)
你可以从source看到它最终返回一个return (PyObject*)cur;
,它是首先传递执行的游标。但是,它看起来确实会返回0
。
DB API规范未指定返回值 Cursor.execute。以前版本的pyodbc(2.0.x)返回不同 值,但2.1版本总是返回Cursor本身。
这允许使用紧凑的代码,例如:
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
所以看起来它的原因是提倡紧凑的代码。