2017-05-18 46 views
2

如何撤消SQLAlchemy查詢上的篩選條件?例如。重寫SQL Alchemy ORM篩選條件

q = Model.query.filter(Model.age > 25) 
q = q.remove_filter(Model.age) # what is this called? 
+0

如果在查詢中按年齡有幾個過濾器,是否需要將它們全部刪除? –

+2

btw你爲什麼需要這個? –

+0

我總是做的是創建一個過濾器列表:'filters = []',然後逐個將它們添加到列表中,而不是逐個添加過濾器:'if x!= y:filters .append(Model.x == y)',這樣你可以根據需要刪除它們。現在最後當你執行查詢時,只要執行'q = q.filter(和_(* filters))' –

回答

-1

我不認爲該功能目前存在。這就是說,你可以通過直接訪問BinaryExpression對象列表來查看(和刪除)where子句(過濾器)。

如果這是你唯一的過濾器,像這樣的工作:

q.whereclause.clauses.pop()

但它變得有點麻煩(和hackier)如果你想刪除特定過濾掉很多。

2

除了其他建議,簡單的(但如果它實際上很簡單取決於你的確切情況)解決方案可以是不適用你不需要的過濾器。

很可能你有一些複雜的代碼有條件地應用過濾器,然後你有一個情況,當你想撤銷一些過濾器。 在這種情況下,您可以將所需的過濾器收集到某個集合中,而不是將所有過濾器應用到查詢中,例如字典或列表。

然後,您從字典中刪除不需要的過濾器,然後將這些收集的過濾器實際應用於查詢對象。