[英]Trying to insert NULL with None as '?' placeholder not working for sqlite3 for Python
我正在使用使用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不同。 相关: 什么是“ = null”和“ IS NULL”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.