SyntaxError:提交时语法无效

时间:2014-10-04 01:46:48

标签: python sqlite

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来说很新,所以提前感谢你的帮助。

2 个答案:

答案 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()

感谢您帮助我到那里:)