INSERT
始终添加
新
row,您不能使用
WHERE
使用时的子句
插入
. 所以是的,你必须使用
UPDATE
在这里你的
更新
然而,语法是错误的。
更新
使用
columname=value
配对,请参见
official documentation for
UPDATE
:
c.execute(
"""UPDATE {} SET unix=?, datestamp=?, keyword=?, value=?
WHERE ROWID = ?""".format(tableToEdit),
(unixVar, dateStampVar, keywordVar, valueVar, int(rowToEdit)))
我从使用串联切换到
str.format()
,但仅用于输入表名。这个
ROWID
值可以作为查询参数传入,也可以这样做。
演示:
>>> import sqlite3
>>> conn = sqlite3.connect(':memory:')
>>> conn.execute('''
... CREATE TABLE stuffToPlot (unix REAL, datestamp TEXT, keyword TEXT, value INTEGER)
... ''')
<sqlite3.Cursor object at 0x10f049ce0>
>>> with conn:
... for _ in range(10):
... c = conn.execute('''
... INSERT INTO stuffToPlot VALUES (42.0, "mar-2010", "The quick brown fox", 81)
... ''')
...
>>> tableToEdit = 'stuffToPlot'
>>> rowToEdit = '5'
>>> unixVar = 5.5
>>> dateStampVar ='feb-2018'
>>> keywordVar = 'Hello World'
>>> valueVar = 25
>>> with conn:
... conn.execute(
... """UPDATE {} SET unix=?, datestamp=?, keyword=?, value=?
... WHERE ROWID = ?""".format(tableToEdit),
... (unixVar, dateStampVar, keywordVar, valueVar, int(rowToEdit)))
...
<sqlite3.Cursor object at 0x10f049ce0>
>>> print(*conn.execute('SELECT * FROM stuffToPlot WHERE ROWID=5'))
(5.5, 'feb-2018', 'Hello World', 25)