Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
Python 在选定的行中更新单个sqlite行_Python_Sqlite - Fatal编程技术网

Python 在选定的行中更新单个sqlite行

Python 在选定的行中更新单个sqlite行,python,sqlite,Python,Sqlite,我有一个要更新的sqlite表。我想在Col2和Col3取某个指定值的单行上更改Col1中的条目 它是一个链接表,其中许多行在Col2和Col3中具有相同的元素组合。因此,如果我运行: c.execute("""UPDATE Table1 SET Col1=(?) WHERE Col2=(?) AND Col3=(?) """, (var1, var2, var3,))

我有一个要更新的sqlite表。我想在Col2和Col3取某个指定值的单行上更改Col1中的条目

它是一个链接表,其中许多行在Col2和Col3中具有相同的元素组合。因此,如果我运行:

c.execute("""UPDATE Table1 SET Col1=(?)  
                WHERE Col2=(?) AND Col3=(?)
                """, (var1, var2, var3,))
这将导致问题,因为它将更改Col2和Col3采用指定值的每一行


值得注意的是,表中的每一行在Col4中都有一个唯一的数字条目——因此我的直觉是,我可以选择Col4中具有最低值的行,其中Col2和3马赫为其指定值,但在阅读了有关更新的文档后,我不清楚如何进行更新。

您可以使用exists逻辑进行更新:

更新表1 设置Col1=? 其中Col2=?和Col3=?和 不存在从表1 t1中选择1 其中t1.Col2=表1.Col2和t1.Col3=表1.Col3和 t1.Col4<表1.Col4; 上述exists子句断言,对于任何匹配的记录,我们无法找到具有相同Col2和Col3值但较小Col4值的另一条记录。

因为Col4是唯一的,所以您所要做的就是找到具有min Col4的行,其中Col2和Col3等于您的参数,您可以使用:

SELECT MIN(Col4) FROM Table1 WHERE (Col2, Col3) = (?, ?)
因此,您的代码应该是:

c.execute("""UPDATE Table1
             SET Col1 = ?
             WHERE Col4 = (SELECT MIN(Col4) FROM Table1 WHERE (Col2, Col3) = (?, ?)) 
                """, (var1, var2, var3,))