我有以下代码来使用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'
答案 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中分离两个不同的两个变量。我希望它是与数据和查询相关的元数据,例如查询的成功状态或类似的东西。 (不知道最后一部分,没有亲自尝试过。)