Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为Sqlite3 Python更新多个值的优雅方式_Python_Python 2.7_Sqlite - Fatal编程技术网

为Sqlite3 Python更新多个值的优雅方式

为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

我有一个名为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 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个参数”这一行的错误消息。所以,在修改了一点(请看我的更新)后,我设法让它工作。