我已经看过类似的其他问题,但有些问题含糊不清,对答案的解释很少。 我有一个sql数据库,包含6个包含n列的表。我想更新,而不是插入其中一个表中的列与python列表中的数据。这是一个名为gbufids的列表,由整数组成,但每个条目都不包含在元组中,即[0,1,2,3]而不是[(1,),(2,),(3,)]。 我想要更改的表名称称为Versions,该列名为ObjectID。我尝试了各种各样的方法,但是没有一个方法可以按照需要的方式完成。我使用了以下内容,我认为在更新表(Versions)中的列(ObjectID)之前,应该将列表中的每个项目转换为元组: cur.executemany('UPDATE Versions set ObjectID =?',(( val,)for gbufids中的val))
接下来是提交和关闭。我已经读过,如果我使用UPDATE,我需要一个WHERE子句,但我对行有点困惑。对我来说,一行是连续的所有单元格,但这可能不是这个意思。如果任何人都可以提供特定于我的数据库,表和列的答案,那么将不胜感激
答案 0 :(得分:0)
没有UPDATE
子句的WHERE
语句将导致表的所有行使用传递给{的每个值进行更新{1}},意味着您最终将填充所有传递的值。为了将每个值与特定行匹配,您需要一些方法来告诉数据库在每次运行语句时要替换哪一行。如果您确定更新值列表的长度等于表格中的行数,并且列表的顺序与您通过简单获得的行的顺序相同executemany
,最简单的方法是获取表格中的SELECT * FROM table
列表:
rowid
然后,您可以将rowids = [row[0] for row in cur.execute('SELECT rowid FROM Versions')]
和rowids
配对并将其传递给gbufids
:
executemany