如何找到一个元组中的项目总和?

问题描述

您好,我希望能够从sqlite数据库检索一组值并将它们全部加在一起。然后,我想将此值插入到使用Tkinter制作的应用程序的antry小部件中。这是我的代码

 conn = sqlite3.connect('InvoiceHistory')
    D = conn.cursor()
    D.execute("""SELECT Invoice_Total FROM InvoiceHistory
               WHERE Cust_ID LIKE""" "'%" + Cust_ID_Box.get() + "%'")
    All_Money = D.fetchall()
    Sum_Totals = sum(All_Money)
    VCB_Entry.insert(0,Sum_Totals)
    conn.commit()
    conn.close()

使用此代码时,出现此错误

  File "C:/Users/Lukas/Desktop/.idea/HatCo.py",line 967,in Show_Balance
    Sum_Totals = sum(All_Money)
TypeError: unsupported operand type(s) for +: 'int' and 'tuple'

我知道这是因为当我将All_Money打印到控制台时,它会以这种方式出现:

[(438.0,),(348.0,)]

我的问题是:如何从元组获取这些值并将它们加在一起?预先谢谢你。

解决方法

您可以使用列表推导从All_Money中创建一个新列表,看起来像这样:

sum([inner_tup[0] for inner_tup in All_Money])

并会产生类似的内容:

sum([438.0,348.0])

sum方法可接受的输入

,

为什么不简单地在数据库中进行计算?这更简单,更有效:

conn = sqlite3.connect('InvoiceHistory')
cur = conn.cursor()
cust_id = "%" + Cust_ID_box.get() + "%"
cur.execute("SELECT SUM(Invoice_Total) FROM InvoiceHistory WHERE Cust_ID LIKE ?",(cust_id,));
rec = cur.fetchone()
sum_totals = rec[0]

请注意,我更改了代码以将变量作为查询参数而不是将其串联到查询字符串中:参数化查询使您的代码更安全(当输入来自程序外部时),并且效率更高(数据库可以不需要在每次执行时都重新解析查询。)