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