基本上,為了能夠撰寫更少的函式,我將編輯過的屬性設為變數。所以我的編輯代碼如下所示:
cur.execute("""
UPDATE acteurs SET ?=? WHERE IDACTEUR=?;
""", (attribute, newvalue, actorid))
conn.commit()
但是在運行它時,我收到一個語法錯誤。我應該如何編輯它以使其作業?
uj5u.com熱心網友回復:
Python 在輸入查詢之前會轉義值 - 出于安全原因 - 因此不能在某些地方使用值,因為它會創建錯誤的查詢。
使用?=?您期望的column=value但它會創建兩個字串"column"="value"并且可能會產生錯誤。
?出于安全原因,它還可能檢查表名或列名是否到位并引發錯誤。
它可能需要放置columnusingstring formatting或f-string。但它不是優選的。查詢不?應用于表名、列名。
最小的作業示例。
它用于con.set_trace_callback(print)顯示上次查詢。
import sqlite3
con = sqlite3.connect(":memory:")#
con.set_trace_callback(print)
cur = con.cursor()
cur.execute("CREATE TABLE test(key TEXT, value TEXT)")
print('---')
cur.execute("INSERT INTO test(key, value) VALUES (?, ?)", ("a", "1"))
con.commit()
print('---')
cur.execute("SELECT key, value FROM test WHERE key=?", ('a',))
row = cur.fetchone()
print(row)
print('---')
cur.execute("SELECT key, value FROM test WHERE ?=?", ('key', 'a'))
row = cur.fetchone()
print(row)
print('---')
try:
cur.execute("UPDATE test SET ?=? WHERE key=?", ('value', '3', 'a',))
con.commit()
except Exception as ex:
print('Exception:', ex)
print('---')
try:
column = 'value'
cur.execute(f"UPDATE test SET {column}=? WHERE key=?", ('3', 'a',))
con.commit()
except Exception as ex:
print('Exception:', ex)
print('---')
cur.execute("SELECT key, value FROM test WHERE key=?", ('a',))
row = cur.fetchone()
print(row)
print('---')
con.close()
示例WHERE key=?", ('a',)創建WHERE key='a'并獲得一行。
示例WHERE ?=?", ('key', 'a',)創建WHERE 'key'='a'并獲得零行。
示例SET ?=?引發錯誤。
CREATE TABLE test(key TEXT, value TEXT)
---
BEGIN
INSERT INTO test(key, value) VALUES ('a', '1')
COMMIT
---
SELECT key, value FROM test WHERE key='a'
('a', '1')
---
SELECT key, value FROM test WHERE 'key'='a'
None
---
Exception: near "?": syntax error
---
BEGIN
UPDATE test SET value='3' WHERE key='a'
COMMIT
---
SELECT key, value FROM test WHERE key='a'
('a', '3')
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/362601.html
