为何能打印数据库行数却无法填充至Tkinter Entry?求提示
问题分析与解决提示
嘿,这是使用数据库游标时很容易踩的一个小坑!
问题根源
当你调用cursor.fetchall()时,游标会一次性取出查询结果集中的所有数据,并且游标指针会移动到结果集的末尾。这意味着第二次调用cursor.fetchall()时,已经没有剩余的数据可以获取了,返回的是空列表,所以len(cursor.fetchall())自然就是0。
两种解决办法
1. 存储结果集复用(最稳妥)
把第一次fetchall()的结果存到一个变量里,之后无论是打印还是给Entry组件赋值,都用这个变量:
cursor.execute('SELECT * FROM contacts;') rows = cursor.fetchall() # 把结果存到变量中 print('row in table contacts:', len(rows)) # 输出104 self.no_count.set(len(rows)) # 现在就能正确设置为104了
2. 使用游标rowcount属性(按需选择)
如果你不需要实际获取数据,只是想知道行数,可以直接用cursor.rowcount(不过要注意:部分数据库驱动在执行SELECT语句后,rowcount可能返回-1,这时候还是第一种方法更可靠):
cursor.execute('SELECT * FROM contacts;') print('row in table contacts:', cursor.rowcount) self.no_count.set(cursor.rowcount)
这样就能解决你遇到的问题啦!
内容的提问来源于stack exchange,提问作者Hermann12
相关产品推荐
相关产品推荐

