作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
我是一名优秀的程序员,十分优秀!