[英]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])
如果bar
為None
則將中斷,而我非常希望它返回bar
為null
每一行。 所有這些都可以在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.