SQLite3 Python用列表更新整行

时间:2015-05-12 14:50:53

标签: python sqlite

系统

  • Python 2.7
  • SQLite3的

信息

我的桌子有以下结构:

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]))

1 个答案:

答案 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()