2014-10-04 29 views
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") 
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() 

遇到了麻煩這在每一行迭代越來越語法錯誤,並且當它運行它只計算第一行和投入的平均水平,爲數據庫中的所有行語法錯誤:無效的語法提交

我做錯了什麼讓它遍歷每一行並計算平均值並將其輸入到數據庫?

蟒蛇很新,所以在此先感謝您的幫助。

+0

不要更改的問題,除去問題。如果你想顯示你的新版本的代碼,添加它作爲一個補充。 – Barmar 2014-10-04 02:04:56

回答

1

問題不在於Python,而在於你的SQL語法。該WHERE條款來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 = ?的參數,這是不正確的。您不能將整個列表放入參數中,它必須是列表中的特定元素,例如像row[6]。我不知道表中ID列的實際位置,所以我不知道什麼是正確的索引。

你也可以做整個事情有一個查詢:

UPDATE combinations6 
SET average = (col1 + col2 + col3 + col4 + col5 + col6)/5 

更換col1等與你計算的平均列的實際名稱。

+0

仍然會在提交= /任何想法時拋出語法錯誤? – 2014-10-04 01:58:06

+0

將'row'參數替換爲包含該ID的列表元素。或者只是使用我添加到我的答案的新查詢。 – Barmar 2014-10-04 02:03:28

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

感謝您的幫助讓我有:)