cursor.rowcount 报错 'int' 对象不可调用

5 投票
4 回答
55123 浏览
提问于 2025-04-16 20:47

我从sqlite3数据库中选择了一些值,然后打印了游标的计数。结果出现了一个错误:“'int'对象不可调用”。

strq="select * from tblsample1"
self.con = sqlite3.connect('mydb.sqlite')
self.cur = self.con.cursor()
self.cur.execute(strq)              
print(self.cur.rowcount())

出现了一个错误

类型错误:'int'对象不可调用

4 个回答

3

错误信息已经说明了一切。不要去调用 rowcount 的值,只需直接访问它就可以了:

print(self.cur.rowcount)
12
print(self.cur.rowcount)

self.cur.rowcount 是一个整数,不是一个函数。

http://docs.python.org/library/sqlite3.html#sqlite3.Cursor.rowcount

编辑

文档回答了你的编辑:

根据Python数据库API规范,rowcount属性“在没有对游标执行任何executeXX()操作时为-1,或者最后一次操作的行数无法通过接口确定时也为-1”。

这包括SELECT语句,因为我们无法在获取所有行之前确定查询产生了多少行。

22

仔细阅读文档!rowcount是一个属性,所以你需要把代码改成:

 print(self.cur.rowcount)

Cursor.rowcount虽然sqlite3模块的Cursor类实现了这个属性,但数据库引擎本身在判断“受影响的行数”或“选择的行数”时,有些地方比较奇怪。


这也包括SELECT语句,因为我们在所有行都被提取之前,无法确定查询产生了多少行。


所以你可以修改你的代码,使用fetchall

self.cur.execute(strq) 
data = self.cur.fetchall()
print len(data)

撰写回答