[英]Please how do i sum up all the integer elements from a sqlite3 table row
我想使用来自sqlite3数据库表的用户数据来计算一行元素的总和
我使用cursor.fetchall()获取数据库表中的金额行,并尝试使用for循环求和表中的元素,但出现错误
db = sqlite3.connect('my.db')
cursor = db.cursor()
cursor.execute('SELECT amount FROM expenses')
result = cursor.fetchall()
c = 0
for x in result:
c += x
print(c)
我收到TypeError:+ =不支持的操作数类型:'int'和'tuple'我希望得到金额的总和
我知道sqlite3 SUM命令。 但我想学习如何使用Tkinter解决此问题
采用
c = 0
for x in result:
c += x[0]
cursor.fetchall()
返回一个元组列表,该元组包含每行的列值。 在您的情况下,碰巧只有一列,但它仍然是(一个元素)元组。
据我所知,cursor.fetchall()返回一个元组(如您的错误告诉您),这意味着您对sql查询的所有选择都将被推入该元组。
例如,如果要选择多个列:
'SELECT amount, tax, date FROM expenses'
您将检索到这样的元组:
(amount, tax, date)
每行都给出该元组。 在您的情况下,结果是一个包含所有行的数组,其中每一行本身都是一个元组,其中只有数量。
长话短说,您要么需要将结果重建为具有列表理解的列表,例如:
db = sqlite3.connect('test.db')
cursor = db.cursor()
cursor.execute('SELECT amount FROM expenses')
result = cursor.fetchall()
result = [amount[0] for amount in result] # Rebuild your result array to contain
# single values instead of tuples
c = 0
for x in result:
c += x
print(c)
另一个解决方案是:
db = sqlite3.connect('test.db')
cursor = db.cursor()
cursor.execute('SELECT amount FROM expenses')
result = cursor.fetchall()
c = 0
for x in result:
c += x[0] # This will retrieve the 0th element from the tuple, which is the amount
print(c)
使用Python内置的sum()
( doc )函数:
c = sum(i[0] for i in result)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.