2013-03-04 61 views
0

我打算在SQLAlachemy網站上登錄一個問題,但在我之前,我只是想檢查我沒有錯過任何。我曾詢問過IRC,我認爲這可能是一個合法的問題。SQLAlchemy不等於postgress

它歸結爲!=過濾器沒有考慮空/空單元格。

因此,可以說,例如

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

現在我希望它可以返回所有記錄中,其中值不等於1,但是,它實際上返回的是那些在數據記錄列表,這不等於1.

因此,如果例如列是一個NULL /空值,它不會被這個查詢返回,我(和其他人)期望它。

現在很明顯,最好的做法是使用創建列爲NOT NULL,但我只是想看看是否有此修復程序,還是其身價提交錯誤

回答

0

嘛,這有沒有關係SQLAlchemy,它就是NULL如何滾動。 NULL != 1既不是真或假,它的計算結果爲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。

+0

謝謝,我的生產數據庫在列上使用不爲空,我只是在本地進行測試並找到它。感謝您清理:) – Cro0ksey 2013-03-04 13:23:59