簡體   English   中英

SQLAlchemy不等於Postgres

[英]SQLAlchemy not equals on postgres

我本打算在SQLAlchemy網站上記錄一個問題,但是在我這樣做之前,我只想檢查一下我是否沒有遺漏任何東西。 我曾問過IRC,我認為這可能是一個合法的問題。

歸結為!=過濾器未考慮空/ NULL單元。

因此,舉例來說

Session.query(Table).\
filter(Table.column != 1).all()

現在,我希望它返回值不等於1的所有記錄。但是,它實際返回的是包含數據的記錄列表,該記錄不等於1。

因此,例如,如果column是NULL /空值,那么此查詢將不會返回它(我(和其他人)希望它返回)。

現在顯然是在創建列時使用NOT NULL的最佳實踐,但是我只是想看看是否有針對此的修復程序,或者是否值得提交錯誤

好吧,這與SQLAlchemy無關,這只是NULL滾動的方式。 NULL != 1既不是true也不是false,它的計算結果為NULL。 因此,WHERE子句不會為該列返回任何具有NULL值的行。

您可以選擇以下兩者之一:

Session.query(Table).filter(or_(
    Table.column == None,
    Table.column != 1,
))

或類似的東西:

Session.query(Table).filter(
    func.coalesce(Table.column, -1) != 1)

將NULL值轉換為可用於比較的值,因為-1 != 1計算為true。

暫無
暫無

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

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