簡體   English   中英

python中的SQLite3 UPDATE錯誤

[英]SQLite3 UPDATE error in python

運行以下SQL語句時,出現“ Operator error near ??”錯誤;

    key = 'field_a'
    value = '01/01/2011'
    #self.testac = '010101010'

    self.qry.execute('''UPDATE data_base SET ?=? WHERE atnumber = ?''',(key, value, self.testac))
    self.qry.commit()

鍵和值是根據用戶要編輯的字段動態生成的,這就是SET語句具有?=?的原因。

有任何想法嗎?

謝謝!

猜一猜, ? 語法僅用於參數綁定。 也就是說,插入綁定參數的 ,這些參數將轉換為適當格式和轉義的字符串。 它不是通用的字符串替換工具-只需對列名稱使用常規的字符串替換。

例如,您將使用:

key = 'field_a'
value = '01/01/2011'
#self.testac = '010101010'

sql = '''UPDATE data_base SET %(key)s=? WHERE atnumber = ?''' % dict(key=key)
self.qry.execute(sql, (value, self.testac))

? 語法僅用於綁定值以防止注入攻擊( 示例 )。

如果要在=的左側接受用戶輸入,則必須確保自己進行清理。 要動態生成語句,任何python字符串方法都可以使用,但是您實際上不應該這樣做。

更好的方法是使用成對的字典{key:sql_str}

call_dict = {'col_name':'UPDATE data_base SET col_name=? WHERE atnumber=?'}
self.qry.execute(call_dict[key],(value,self.testac))

[編輯,固定錯字]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM