這是一個說明我的資料庫的功能代碼塊。
嘗試使用 UPDATE 和串列中的資料編輯記錄時會出現問題。我可以從串列中創建記錄,但這不包括 'WHERE oid = ? ' 命令選擇要更新的記錄。
import sqlite3
oid = 1
inpts = list()
inpts.append('Breadname')
inpts.append('33')
inpts.append('Flour')
inpts.append('Mix and Bake!')
edits = list()
edits.append('Brodname')
edits.append('25')
edits.append('Flower')
edits.append('Mix a lot and Bake!')
def make_SQL(): # create SQL file and a table named 'brods'
conn = sqlite3.connect('formulas.sqlite')
cur = conn.cursor()
cur.execute("""CREATE TABLE IF NOT EXISTS brods
(fname TEXT, msr1 TEXT, ngr1 TEXT, notes TEXT)""")
conn.commit()
conn.close()
def fill_SQL(inpts):
conn = sqlite3.connect('formulas.sqlite')
cur = conn.cursor()
cur.execute("""INSERT INTO brods
(fname, msr1, ngr1, notes)
VALUES (?,?,?,?)""",(inpts))
conn.commit()
def save_edits_SQL(edits,oid):
conn = sqlite3.connect('formulas.sqlite')
cur = conn.cursor()
cur.execute("""UPDATE brods
(fname, msr1, ngr1, notes)
VALUES (?,?,?,?) WHERE oid = ? """,(edits,oid))
conn.commit()
def get_formula(oid):
f_data = ()
conn = sqlite3.connect('formulas.sqlite')
cur = conn.cursor()
cur.execute('SELECT * FROM brods WHERE oid = ?', (oid,))
conn.commit()
for row in cur:
f_data = row
conn.commit()
conn.close()
print('fdata',f_data)
conn.close()
return (f_data)
make_SQL()
fill_SQL(inpts)
save_edits_SQL(edits,oid)
get_formula(1)
運行save_edits_SQL會產生以下錯誤訊息:
Traceback (most recent call last):
File "/Users/patrickscott/PycharmProject/PY4EveryoneTutorial/Ch 3 Conditional Execution/Bakers Formulas/sandbox.py", line 62, in <module>
save_edits_SQL(edits,oid)
File "/Users/patrickscott/PycharmProject/PY4EveryoneTutorial/Ch 3 Conditional Execution/Bakers Formulas/sandbox.py", line 40, in save_edits_SQL
cur.execute("""UPDATE brods
sqlite3.OperationalError: near "(": syntax error
uj5u.com熱心網友回復:
這不是更新陳述句的作業方式。
你需要使用SET,例如這樣的:
cur.execute("""UPDATE brods
SET fname = ?,
msr1 = ?,
ngr1 = ?,
notes = ?
WHERE oid = ?""",
(*edits, oid))
要么
cur.execute("""UPDATE brods
SET (fname, msr1, ngr1, notes) = (?, ?, ?, ?)
WHERE oid = ?""",
(*edits, oid))
我也改為(edits, oid)這里(*edits, oid)以確保我們得到一個扁平元組而不是嵌套元組。edits [oid]如果您愿意,可以改用。
比較:
>>> ((1, 2, 3), 4)
((1, 2, 3), 4)
>>>
>>> (*(1, 2, 3), 4)
(1, 2, 3, 4)
>>>
>>> [1, 2, 3] [4]
[1, 2, 3, 4]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/430516.html
