0

我抓取网站并将结果写入数据库,有些元素可能是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)

但它像第一个一样工作。我能做些什么?

4

1 回答 1

1

您可以使用“NULL-safe”运算符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 演示

于 2019-07-17T20:16:54.823 回答