更新列表中的匹配行

时间:2017-02-24 18:35:01

标签: python list sqlite

我有一个看起来像这样的表:

Column1    |  Column2 | Column3
sky        |  blah    | Null
giraffe    |  blah    | Null
apple      |  blah    | value

并列出2个:

List1 = [sky, gold, giraffe]
List2 = [blue, yellow, tall]

我希望将Column1中的某些值与List1中的值进行匹配,并更新使用List2中的值找到的Column3行。 List1和List2项目具有相同的索引以相互匹配,因此天空的匹配值为蓝色等。所以我试图在Colum3中插入'blue',如果该字段为Null,则在'sky'行中插入。

最好的方法是什么?

2 个答案:

答案 0 :(得分:2)

只需从每个列表中获取条目,并尝试对每个这样的对进行更新:

for name, value in zip(List1, List2):
    cursor.execute('''UPDATE MyTable
                      SET Column3 = ?
                      WHERE Column1 = ?
                        AND Column3 IS NULL''',
                   (value, name))

这可以进一步简化:

cursor.executemany('''UPDATE MyTable
                      SET Column3 = ?
                      WHERE Column1 = ?
                        AND Column3 IS NULL''',
                   zip(List2, List1))

答案 1 :(得分:0)

只是答案的一部分,但可能是一个有用的开始。

使用pandas将两个列表放入数据库中与另一个表的表中。然后编写一些sql来进行实际更新。

如果我想这样做,我会回到这里。

>>> import pandas as pd
>>> List1 = ['sky', 'gold', 'giraffe']
>>> List2 = ['blue', 'yellow', 'tall']
>>> df = pd.DataFrame({'List1': List1, 'List2': List2})
>>> df
     List1   List2
0      sky    blue
1     gold  yellow
2  giraffe    tall
>>> import sqlite3
>>> conn = sqlite3.connect('c:/scratch/temp.sqlite')
>>> df.to_sql('Lists',conn)

完成我的回答:

update temp
set column3 = (select List2 
                            from Lists
                            where List1 = temp.Column1)
where Column3 is null