2016-12-31 272 views
0

如果我想用python在sqlite3中插入一個變量值,可以編寫下面的語句。例如:如何在Python中使用UPDATE語句sqlite3插入變量?

import sqlite3 
import random 

conn = sqlite3.connect('testing.db') 
c = conn.cursor() 
c.execute("CREATE TABLE IF NOT EXISTS testing(Name TEXT, Telephone TEXT, ID REAL)") 

var1 = input("Value:") 
var2 = input("Value:") 
var3 = random.randint(1,20) 

c.execute("INSERT INTO testing VALUES(?, ?, ?)", (var1, var2, var3)) 

conn.commit() 
conn.close() 

如果我想要做同樣與UPDATE語句。我嘗試這樣做,是給我的錯誤:

column = input("Column to update:") 
update_user = input("Value to update:") 
field_name = input("Where field name equal to:") 
value = input("Value") 

c.execute("UPDATE testing SET ? = ? WHERE ? = ?", (column, update_user, field_name, value)) 

conn.commit() 

這是我得到的錯誤:

sqlite3.OperationalError: near "?": syntax error 
+1

複製錯誤並將其發佈到此處。 – Shubham

+0

可能重複的[sqlite3.OperationalError:near「?」:syntax error](http://stackoverflow.com/questions/25387537/sqlite3-operationalerror-near-syntax-error) – Shubham

回答

2

這其實是一個普遍的問題,在您的更新查詢,您不能參數列名字。換句話說:

UPDATE testing SET ? = ? WHERE ? = ? 
       THIS^  THIS^ 

不能查詢佔位符,你必須將它們插入通常的方式 - 通過字符串格式化:

c.execute(""" 
    UPDATE 
     testing 
    SET 
     {0} = ? 
    WHERE 
     {1} = ?""".format(column, field_name), (update_user, value)) 

雖然,你應該小心妥善消毒,驗證columnfield_name值以防止SQL injection attacks

+0

即使此問題已被回答不同的變化,我會留下這個答案,因爲它指出了在這個特定的用例中發生了什麼以及要做什麼。 – alecxe