簡體   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