使用字典列表更新表格

0 投票
1 回答
1487 浏览
提问于 2025-04-18 07:07

我有一个字典的列表,这实际上是我之前查询的结果,我把它转换成了字典(这样我就可以编辑一些列的值):

sql_select = "SELECT key1, key2, value1, value2 FROM table_a"
self.dbcur.execute(sql_select)
matchedrows = self.dbcur.fetchall()

dictrows = [dict(row) for row in matchedrows]
for row in dictrows:
    ....process data, update some fields etc.

现在我想把我的修改写回到sqlite表中,我的明显选择是尝试使用更新语句,但我在构造这个语句时失败得很惨(因为知识不足)

sql_update = ('UPDATE table_a SET value1 = ?, value2 = ? WHERE key1 = ? and key2 =?')
self.dbcur.execute(sql_update, dictrows)
self.dbcon.commit()

这样做可能吗?还是我应该考虑其他方法,比如插入到临时表等等?

1 个回答

2

sqlite3 数据库适配器使用命名参数,格式是 :keyname。结合 cursor.executemany() 方法,你可以把字典列表转换成一系列的 UPDATE 语句。

sql_update = ('''\
    UPDATE table_a SET value1 = :value1, value2 = :value2
    WHERE key1 = :key1 and key2 = :key2''')
self.dbcur.executemany(sql_update, dictrows)

对于 dictrows 列表中的每个字典,查询会从字典中提取 value1value2key1key2 这些键作为 SQL 参数,然后执行 UPDATE 语句。

当然,你需要使用字典中的实际键名。

撰写回答