sqlite 使用字符串列表更新单个列

mlmc2os5  于 2022-11-15  发布在  SQLite
关注(0)|答案(2)|浏览(152)

UPDATE:如何指定列表中的第一项应该用于更新列的第一行,依此类推,直到列表的末尾(它包含列中有行的名称和项数)?

sc_id = 1
for x in generator_list:
    c.execute('UPDATE breakdown SET characters = ? 
    WHERE rowid = sc_id', x)
    sc_id += 1

给出错误:sqlite3.OperationalError:没有这样的列:sc_id
前一个问题:为什么当我在SQLite3中executemanyUPDATE一列时,它将最后一行写入所有行?
我正在使用:

c.executemany('UPDATE breakdown SET characters = ?', generator_list)

generator_list由以下各项构成:

generator_expression = ((val,) for val in updated_local_sc_char_lists)
generator_list = list(generator_expression)

updated_local_sc_char_lists = ['1-HARPER, RORY, THOMAS', 'AUGUST, THOMAS']

generator_list = [('1-HARPER, RORY, THOMAS',), ('AUGUST, THOMAS',)]

在我执行UPDATE并选择查询后,它返回:

[('AUGUST, THOMAS',), ('AUGUST, THOMAS',)]
6tqwzwtp

6tqwzwtp1#

问题是,您没有在SQL语句中指定WHERE条件。目前您发送了两个更新。第一条语句将所有行更改为('1-HARPER, RORY, THOMAS',),第二条语句将所有行更改为('AUGUST, THOMAS',)
您需要添加的是指定应该更改哪些行的位置。您可能对每一行都有某种类型的行ID或其他唯一的标识符。如果您告诉我们该标识符,我可以帮助您修改您的SQL语句。

4nkexdtk

4nkexdtk2#

更新后的问题的答案是将sc_id转换为我传递的另一个参数:

sc_id = 1
for x in generator_list:
    c.execute('UPDATE breakdown SET characters = ? 
    WHERE rowid = ?;', (x[0], sc_id))
    sc_id += 1

相关问题