Python 3.x 如何比较无Python和空SQLite?
我抓取站点并将结果写入数据库,一些元素可能是Python 3.x 如何比较无Python和空SQLite?,python-3.x,sqlite,Python 3.x,Sqlite,我抓取站点并将结果写入数据库,一些元素可能是None,这不是问题,在数据库中它们显示为NULL。 问题是,在写入数据库之前,我会检查此记录是否已存在: cursor=wait db.execute('从匹配项中选择*,其中(a=“{}”和b=“{}”和c=“{}.”格式(a,b,c))) 问题是SELECT认为a='None'而不是a=None 这很奇怪,因为当记录一切正常时: 插入匹配的(a、b、c)值(?、、?)、(a、b、c) 在这种情况下,如果某个元素在数据库中是None,那么它将是
None
,这不是问题,在数据库中它们显示为NULL
。
问题是,在写入数据库之前,我会检查此记录是否已存在:
cursor=wait db.execute('从匹配项中选择*,其中(a=“{}”和b=“{}”和c=“{}.”格式(a,b,c)))
问题是SELECT
认为a='None'
而不是a=None
这很奇怪,因为当记录一切正常时:
插入匹配的(a、b、c)值(?、、?)、(a、b、c)
在这种情况下,如果某个元素在数据库中是None
,那么它将是NULL
我尝试了另一种选择:
从匹配项中选择*,其中(a=?和b=?和c=?),(a,b,c)
但它像第一个一样工作。
我能做什么?您可以使用“空安全”运算符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;