gpt4 book ai didi

python - 尝试插入 NULL 与 None 作为 '?' 占位符不适用于 sqlite3 for Python

转载 作者:行者123 更新时间:2023-12-01 00:48:25 24 4
gpt4 key购买 nike

我正在使用 sqlite3 for Python 开发一个数据库来存储地址。据我所知,您使用 ? 作为占位符,并向 execute 方法提供一个元组或值列表来填充占位符。我还知道 None 应该对应于 sqlite 的 NULL 值。

但是,如果我尝试像这样从表中SELECT,即使该条目确实存在于表中,它也不会获取任何值:

cursor.execute('SELECT * FROM test WHERE (address, apartment, city, state) = (?, ?, ?, ?);',
('123 Front St', None, 'Springfield', 'WA'))

但是,如果公寓不是 NULL 值,并且我给它一个公寓的常规旧字符串,它会很好地获取它。

我做错了什么?

最佳答案

您可以将查询重写为 NULL 安全:

-- ISO-standard
SELECT *
FROM test
WHERE address IS NOT DISTINCT FROM ?
AND apartment IS NOT DISTINCT FROM ?
AND city IS NOT DISTINCT FROM ?
AND state US NOT DISTINCT FROM ?;

-- SQLite
SELECT *
FROM test
WHERE (address = ? OR ? IS NULL)
AND (apartment = ? OR ? IS NULL)
...
<小时/>

在 SQL 世界中,col = NULL 产生 Unknown,这与 true 不同。相关:what is “=null” and “ IS NULL

关于python - 尝试插入 NULL 与 None 作为 '?' 占位符不适用于 sqlite3 for Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56762517/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com