我抓取站点并将结果写到数据库中,某些元素可能是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)
但是它像第一个一样工作。 我该怎么办?
答案 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;