当前位置:  开发笔记 > 编程语言 > 正文

cursor.rowcount在python3k中的sqlite3中始终为-1

如何解决《cursor.rowcount在python3k中的sqlite3中始终为-1》经验,为你挑选了4个好方法。

我试图在我的Python3k程序中得到rowcount一个sqlite3 cursor,但我很困惑,因为rowcount它始终是-1,尽管Python3文档说(实际上它是矛盾的,它应该是None).即使在取出所有行之后,rowcount仍然留在-1.这是一个sqlite3错误吗?我已经检查过表中是否有行.

我可以绕过这个检查,如果一个fetchone()返回不同的东西None,但我认为这个问题很好讨论.

谢谢.



1> nosklo..:

从文档:

根据Python DB API Spec的要求,如果没有对游标执行executeXX()或者最后一个操作的rowcount不能被接口确定,则rowcount属性"为-1".

这包括SELECT语句,因为在获取所有行之前,我们无法确定查询生成的行数.

这意味着所有 SELECT陈述都没有rowcount.记录您正在观察的行为.

编辑:文档没有说明你做任何事后rowcount 都会更新,fetchall()所以假设这是错误的.



2> 小智..:
cursor = newdb.execute('select * from mydb;')
print len(cursor.fetchall())

fetchall()将返回select返回的行列表.该列表的Len将为您提供行数.


最主要的警告是-如果发生更改,该调用将返回过多的行,则可能会遇到内存问题。(这就是为什么execute返回游标[Python迭代器]而不返回显式列表或数组的原因)。(尽管在我的特定情况下,这不是问题。)

3> Alex Martell..:

我建议不要"检查fetchone()是否返回与None不同的东西",而是建议:

cursor.execute('SELECT * FROM foobar')
for row in cursor:
   ...

这只是sqlite-only(在其他DB API实现中不支持),但非常方便的sqlite特定Python代码(并且完整记录,请参阅http://docs.python.org/library/sqlite3.html).



4> oxidworks..:

可以这样计算行数:

 print cur.execute("SELECT COUNT(*) FROM table_name").fetchone()[0]

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有