我的桌子有以下结构:
c.execute("CREATE TABLE foo (id INTEGER, number INTEGER, number2 REAL, letters TEXT)")
我得到以下列表
list_foo = [9, 1, 2.3, 'abc']
编辑:在表格中我已经有了字段,所以在这种情况下应该更新表格,其中id = 9
如何使用列表变量更新行?
c.execute("UPDATE foo SET VALUES = ? WERE id = ?", (list_foo, listfoo[0]))
但当然VALUES不起作用。如何在不输入的情况下立即更新行:
c.execute("UPDATE foo SET id = ?, number = ?, number2 = ?, letters = ? WERE id = ?", (list_foo[1], list_foo[2], list_foo[3], list[0]))
我的实际表格中有更多的条目,所以输入就好了。
编辑2:如果不可能而且我必须使用我的长SQLite3代码,那么至少可以使用:
(list_foo[1:], list_foo[0])
而不是
(list_foo[1], list_foo[2], list_foo[3], list[0]))
答案 0 :(得分:0)
更新**(您可以通过转义引号来破解某些内容,除此之外我不确定您要查找的内容是否存在)
def quote_identifier(s, errors="strict"):
encodable = s.encode("utf-8", errors).decode("utf-8")
nul_index = encodable.find("\x00")
if nul_index >= 0:
error = UnicodeEncodeError("NUL-terminated utf-8", encodable,
nul_index, nul_index + 1, "NUL not allowed")
error_handler = codecs.lookup_error(errors)
replacement, _ = error_handler(error)
encodable = encodable.replace("\x00", replacement)
return "\"" + encodable.replace("\"", "\"\"") + "\""
list_foo = [2, 2, 2.5, 'abd']
tab_names = ('number','number2','letters')
dic = dict(zip(tab_names, list_foo[1:len(list_foo)]))
for x in dic:
c.execute("UPDATE foo SET"+quote_identifier(x)+"=? WHERE rowid=?",[dic[x], list_foo[0]])
rec_con.commit()