import sqlite3
import numpy
conn = sqlite3.connect('lotto.db')
cur = conn.cursor()
def fun(a,b,c,d,e,f):
list = [a, b, c ,d, e, f]
print(list)
return numpy.mean(list)
numbers = cur.execute("SELECT * FROM combinations6")
numbers.fetchall()
for row in numbers:
cur.execute("UPDATE combinations6 WHERE id = ? SET average = ?", (row, fun(row[0],row[1],row[2],row[3],row[4],row[5]))
conn.commit()
conn.close()
无法通过迭代遍历每一行获取语法错误,当它运行时,它只计算第一行的平均值并输入数据库的所有行
我做错了让它迭代每一行并计算平均值并将其输入数据库?
对python来说很新,所以提前感谢你的帮助。
答案 0 :(得分:1)
问题不在于Python,而在于你的SQL语法。 <{em>} WHERE
之后 {<1}}来自。
SET
不要忘记交换替换参数的顺序以匹配它。
此外,您使用cur.execute("UPDATE combinations6 SET average = ? WHERE id = ?", (fun(row[0],row[1],row[2],row[3],row[4],row[5]), row)
作为row
的参数,这是不对的。您不能将整个列表放入参数中,它必须是列表的特定元素,例如像id = ?
这样的东西。我不知道你的表中ID列的实际位置,所以我不知道正确的索引是什么。
您也可以通过一个查询完成整个事情:
row[6]
将UPDATE combinations6
SET average = (col1 + col2 + col3 + col4 + col5 + col6)/5
等替换为您计算平均值的列的实际名称。
答案 1 :(得分:0)
import sqlite3
import numpy
conn = sqlite3.connect('lotto.db')
cur = conn.cursor()
def fun(a,b,c,d,e,f):
list = [a, b, c ,d, e, f]
print(list)
return numpy.mean(list)
numbers = cur.execute("SELECT * FROM combinations6")
num = numbers.fetchall()
for row in num:
cur.execute("UPDATE combinations6 SET average = ? WHERE id = ?", (fun(row[0],row[1],row[2],row[3],row[4],row[5]), row[7]))
conn.commit()
conn.close()
奇怪地修复了添加查询并使用不同的指针和不同的查询
num = numbers.fetchall()
感谢您帮助我到那里:)