python-3.x - 如何比较 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)
但它像第一个一样工作。我能做些什么?
解决方案
您可以使用“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;
推荐阅读
- javascript - 我使用 React hooks 和 React memo 来防止我的功能组件重新渲染,但不起作用?
- vue.js - b-field 值仅更新@select 而不是@input?
- javascript - 使用 NodeJS 将 .DEX 文件作为文本读取
- android - 在有房间的android中查询最近7天的行
- python-3.x - 使用 python 查找分子中原子的键无法正常工作
- c# - 从 ListView 而不是对象中检索所选项目的文本
- javascript - 当我们将对象作为键时,如何从 javascript Map 中检索值?
- scala - Gradle + Scala Plugin + Zinc 1.3.5 将 Protobuf 3.7 泄漏到编译器类路径
- python - TypeError: load_road() 接受 3 个位置参数,但给出了 4 个
- python - 我在 python 中使用了 os.system("start audio.mp3") 并且它有效。但它不会自行关闭,音频会在其他屏幕上打开