簡體   English   中英

Python sqlite3如何檢查可能為空的python值是否相等

[英]Python sqlite3 how do I check equality with potentially null python value

看來在SQL中null = null返回false。 在某些情況下,我可以看到這是有意義的,其中null表示未知/未指定,但是在某些情況下,我希望null = null為真,因此非常有意地使用null來表示已知和定義明確的缺席。

使用sqlite3時解決此問題的正確方法是什么? 作為當前正在做的事情:

c.execute('select * from foo where bar = ?', [bar])

如果barNone則將中斷,而我非常希望它返回barnull每一行。 所有這些都可以在Haskell的持久性中無縫運行,這是我在另一端使用的( FooBar ==. Nothing ),因此我希望在Python端獲得類似的效果。

在SQL中, NULL = NULL確實為假(實際上IIRC為NULL,但這也為假)。 在您的示例中,您需要的is運算符'select * from foo where bar is ?'

我猜在持續的行為是選擇=或者is根據該值是否是類型Maybe a與否,Python沒有這方面的信息(至少是標准庫的sqlite的模塊不)。

IS和IS NOT運算符的工作方式類似於=和!=,除非其中一個或兩個操作數均為NULL。 在這種情況下,如果兩個操作數均為NULL,則IS運算符的計算結果為1(true),而IS NOT運算符的計算結果為0(false)。 如果一個操作數為NULL,另一個則為NULL,則IS運算符的計算結果為0(假),而IS NOT運算符的計算結果為1(真)。 IS或IS NOT表達式無法計算為NULL。 運算符IS和IS NOT的優先級與=相同。

資料來源: https : //www.sqlite.org/lang_expr.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM