使用Python、sqlite3和lis更新SQL数据库中的列

2024-09-30 22:18:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我也看过其他类似的问题,但有些问题模棱两可,几乎没有解释答案。 我有一个sql数据库,有6个表,包含n个列。我想用python列表中的数据更新而不是插入其中一个表中的列。这是一个名为gbufids的列表,由整数组成,但每个条目不包含在元组中,即[0,1,2,3]不是[(1,),(2,),(3,)]。 我要更改的表名称为Versions,列名为ObjectID。我尝试了各种各样的方法,但没有一种方法能按要求完成工作。我使用了以下方法,我认为在更新表(版本)中的列(ObjectID)之前,应该将列表中的每个项转换为元组:当前执行人('UPDATE Versions set ObjectID=?',((val,)表示gbufids中的val))

接下来是提交和结束。我读过,如果我使用UPDATE,我需要一个WHERE子句,但我对row有点困惑。对我来说,一行就是一行中的所有单元格,但这可能不是真正的含义。如果有人能提供一个特定于我的数据库,表和列的答案,将不胜感激


Tags: 数据方法答案名称数据库列表sqlupdate
1条回答
网友
1楼 · 发布于 2024-09-30 22:18:46

不带WHERE子句的UPDATE语句将导致表的所有行都用传入executemany的每个值进行更新,这意味着您将使用最后传递的值填充所有行。为了将每个值与特定的行匹配,您需要某种方法告诉数据库在每次运行语句时要替换哪一行。如果确定更新值列表的长度等于表中的行数,并且列表的顺序与使用简单的SELECT * FROM table得到的行的顺序相同,那么最简单的方法就是在表中获得rowid的列表:

rowids = [row[0] for row in cur.execute('SELECT rowid FROM Versions')]

然后您可以将rowidsgbufids配对并将其传递给您的executemany

^{pr2}$

相关问题 更多 >