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



根据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

所以看起来它的理由是提倡紧凑的代码。

相关内容

  • 没有找到相关文章

最新更新