从列表更新sqlite3 db

时间:2017-02-23 12:28:22

标签: python list sqlite

我表格中的列如下所示:

Name1 | Name2 |重量|高度| Number1 | NUMBER2

Number1和Number2列中的一些是Null,我只是尝试仅更新Null行。为此,我有6个列表:

List1 contains the values in Name1, in the same order
List2 contains the values in Name2, in the same order
List3 contains the values in Name1, but in a different order
List4 contains the values in Name2, but in the same order as List3

列表5和6分别包含要插入Number1和Number2的值,与列表3和列4的顺序相同。

所以我想做的是:

  1. 在表格中搜索Number1和Number2中Null值的所有行;

  2. 搜索列表3或4以查找与Name1或Name2匹配的值,因此如果在列表3中找到匹配项,则Number1和Number2的值仍应分别从列表5和6填充。

  3. 所以我想到的代码看起来像这样:

    for i in Name1:
        c.execute("SELECT * FROM Mytable WHERE Number1 IS NULL")
        if Name1 is List3:
            c.execute("INSERT INTO Mytable (Number1, Number2)" " VALUES (?, ?)",
    (List5[i], List6[i]))
        elif Name2 is List4:
            c.execute("INSERT INTO Mytable (Number1, Number2)" " VALUES (?, ?)",
    (List5[i], List6[i]))
    

    但是,当我运行它时,它会向表中添加行,但没有Number1或Number2的值。我哪里错了?

1 个答案:

答案 0 :(得分:0)

  

我哪里错了?

可能在这里:

if Name1 is List3:
[...]
elif Name2 is List4:

object identityis关键字测试,这不是您想要的。即使是平等的考验也不会对你有帮助,因为两个名单中的顺序都不同。

>>> a = ["a", "b", "c"]
>>> b = a
>>> a is b
True
>>> a = ["a", "b", "c"]
>>> b = ["a", "b", "c"]
>>> a is b
False
>>> a == b
True
>>> b = ["b", "c", "a"]
>>> a == b
False

由此产生的行为是您的if个分支都没有被执行。为了实现您的目标,您需要测试两个列表是否包含相同的成员:

Testing if a list contains another list with Python

但是,你的问题还不清楚确切的条件:Name1 / List3和Name2 / List4是否应该包含完全相同的成员,或者是否足以让一个成员包含在另一个成员中?您或许可以自己解决问题;如果没有,我建议你打开另一个关于这个具体问题的问题。

相关问题