首页 > 解决方案 > 如何比较 None Python 和 NULL 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)

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

标签: python-3.xsqlite

解决方案


您可以使用“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 演示


推荐阅读