哪个游标对象是pyodbc的`Cursor.execute`返回?

时间:2015-04-24 15:50:49

标签: python pyodbc

根据PEP249Cursor.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中的规范?

1 个答案:

答案 0 :(得分:4)

你可以从source看到它最终返回一个return (PyObject*)cur;,它是首先传递执行的游标。但是,它看起来确实会返回0

README.md以及

似乎也涵盖了这一点
  

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

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