繁体   English   中英

尝试插入无为'?'的NULL 占位符不适用于sqlite3 for Python

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM