Python - 不确定为什么我得到TypError

时间:2018-01-29 19:03:05

标签: python sqlite

我有以下代码来使用sqlite3游标计算百分比变化:

cursor3.execute('SELECT total FROM userTotals WHERE userid = :userid ORDER BY date DESC LIMIT 1', {'userid': userid})

for value in cursor3:
    total = value

percentageChange = ((float(valueList['Total']) - total)/abs(total))*100

在这种情况下,float(valueList ['Total'])没有问题,我从数据库收集的总数是REAL类型,sqlite命令返回的当前值是1.0。为什么会出现以下错误?

    percentageChange = ((float(valueList['Total']) - total)/abs(total))*100
TypeError: unsupported operand type(s) for -: 'float' and 'tuple'

3 个答案:

答案 0 :(得分:4)

您的查询返回一堆行。包含单个值的行与该值不同(例如1 != [1]),因此您需要从中提取单个字段:

cursor3.execute('SELECT ... LIMIT 1', {'userid': userid})
total = cursor3.fetchone()[0]

或者:

cursor3.execute('SELECT ... LIMIT 1', {'userid': userid})
(total,) = cursor3.fetchone()

# total, = cursor3.fetchone() also works but it always looks funny to me

以上格式适用于包含多列的结果:

cursor3.execute('SELECT a, b ... LIMIT 1', {'userid': userid})
total1, total2 = cursor3.fetchone()

答案 1 :(得分:0)

我相信你的光标返回一个元组,值正在引用元组对象。

您可以使用类似的打印语句来确认:

notifyItemChanged

检查你实际上要回来的东西。

另外,为什么不尝试使用以下语法:

for value in cursor3:
    print(value)

答案 2 :(得分:0)

似乎total包含tuple类型的值。我建议您打印查询中返回的数据,以查看实际包含的数据。 print(cursor3)print(value)可以解决问题。

您可能需要从cursor3中分离两个不同的两个变量。我希望它是与数据和查询相关的元数据,例如查询的成功状态或类似的东西。 (不知道最后一部分,没有亲自尝试过。)