为Sqlite3 Python更新多个值的优雅方式
我有一个名为MYTABLE的为Sqlite3 Python更新多个值的优雅方式,python,python-2.7,sqlite,Python,Python 2.7,Sqlite,我有一个名为MYTABLE的Sqlite3数据库,如下所示: UPDATE MYTABLE set COUNT = COUNT + 5 where ID in (1, 2, 3, 4) 我的目标是通过简单地将现有值与新值相加来更新COUNT列的值 我将收到两个输入: 首先,我需要为COUNT列更新的ID列表。 例如:['1','3','2','5'] 第二,要添加到中每个ID的计数数 上面的清单 到目前为止,我能想到的最好办法是: #my input1, the list of IDs th
Sqlite3
数据库,如下所示:
UPDATE MYTABLE set COUNT = COUNT + 5 where ID in (1, 2, 3, 4)
我的目标是通过简单地将现有值与新值相加来更新COUNT列的值
我将收到两个输入:
#my input1, the list of IDs that need updating
id_list = ['1','2','5','3']
#my input2, the value to be added to the existing count value
new_count = 3
#empty list to store the original count values before updating
original_counts = []
#iterate through the input1 and retrieve the original count values
for item in id_list :
cursor = conn.execute("SELECT COUNT from MYTABLE where ID=?",[item])
for row in cursor:
original_counts.append(row[0])
#iterate through the input1 and update the count values
for i in range(len(id_list )):
conn.execute("UPDATE MYTABLE set COUNT = ? where ID=?",[original_counts[i]+new_count ,mylist[i])
有没有更好/更优雅、更有效的方法来实现我的目标
更新1:
我试过基于N Reed的答案(不完全相同)这样做,效果很好
for item in mylist:
conn.execute("UPDATE MYTABLE set VAL=VAL+? where ID=?",[new_count,item])
对我来说,我们可以根据当前值(我不知道)更新
sqlite3
中的值您想创建一个如下所示的查询:
UPDATE MYTABLE set COUNT = COUNT + 5 where ID in (1, 2, 3, 4)
我对python不太了解,但您可能需要python中的代码,比如:
conn.execute("UPDATE MYTABLE set COUNT = COUNT + ? where ID in (?)", new_count , ",".join(mylist))
请记住,使用sqllite在Id列表中可以包含的项目数量是有限制的(我认为大约是1000个)
在以这种方式创建查询时,也要非常小心sql注入。您可能需要确保mylist中的所有项目都已转义到其他地方
我还建议不要使用名为“count”的列,因为它是sql中的关键字。@N Reed在第二行中使用的是有效的查询语句吗?“Count”列只是为了简单起见而编造的。我的实际数据库有正确的名称,它与任何关键字都不冲突。不过,谢谢您指出。另外,我的ID列表的长度将始终小于100,因此应该不会有问题。@N Reed抱歉,我无法让您的第二行正常工作,因为我收到了“预期2个参数-给定3个参数”这一行的错误消息。所以,在修改了一点(请看我的更新)后,我设法让它工作。