如何比较None Python和NULL SQLite?

时间:2019-07-17 20:14:11

标签: python-3.x sqlite

我抓取站点并将结果写到数据库中,某些元素可能是None,这不是问题,在数据库中它们显示为NULL。 问题是在写入数据库之前,我检查该记录是否已经存在:

cursor = await db.execute('SELECT * FROM MATCHES WHERE (a="{}" AND b="{}" AND c="{}".format(a, b, c)))

问题是SELECT认为a = 'None'而不是a = None 这很奇怪,因为录制时一切正常:

INSERT INTO MATCHES (a, b, c) VALUES (?,?,?), (a, b, c)

在这种情况下,如果数据库中某个元素为None,则它将为NULL 我尝试了另一种选择:

SELECT * FROM MATCHES WHERE (a=? AND b=? AND c=?), (a, b, c)

但是它像第一个一样工作。 我该怎么办?

1 个答案:

答案 0 :(得分:1)

您可以使用“ NULL安全”运算符IS

SELECT * FROM MATCHES WHERE (a IS ? AND b IS ? AND c IS ?);

CREATE TABLE tab(i INT, j INT);
INSERT INTO tab(i, j) VALUES (1,1),(NULL,NULL),(1,2);

SELECT *
FROM tab
WHERE i = j;

SELECT *
FROM tab
WHERE i IS j;

db-fiddle.com demo