我试图在我的Python3k程序中得到rowcount
一个sqlite3
cursor
,但我很困惑,因为rowcount
它始终是-1
,尽管Python3文档说(实际上它是矛盾的,它应该是None
).即使在取出所有行之后,rowcount
仍然留在-1
.这是一个sqlite3
错误吗?我已经检查过表中是否有行.
我可以绕过这个检查,如果一个fetchone()
返回不同的东西None
,但我认为这个问题很好讨论.
谢谢.
从文档:
根据Python DB API Spec的要求,如果没有对游标执行executeXX()或者最后一个操作的rowcount不能被接口确定,则rowcount属性"为-1".
这包括
SELECT
语句,因为在获取所有行之前,我们无法确定查询生成的行数.
这意味着所有 SELECT
陈述都没有rowcount
.记录您正在观察的行为.
编辑:文档没有说明你做任何事后rowcount
都会更新,fetchall()
所以假设这是错误的.
cursor = newdb.execute('select * from mydb;') print len(cursor.fetchall())
fetchall()将返回select返回的行列表.该列表的Len将为您提供行数.
我建议不要"检查fetchone()是否返回与None不同的东西",而是建议:
cursor.execute('SELECT * FROM foobar') for row in cursor: ...
这只是sqlite
-only(在其他DB API实现中不支持),但非常方便的sqlite
特定Python代码(并且完整记录,请参阅http://docs.python.org/library/sqlite3.html).
可以这样计算行数:
print cur.execute("SELECT COUNT(*) FROM table_name").fetchone()[0]