SQLAlchemy过滤器,用于在数组列中不包含值的行

时间:2016-04-18 14:05:08

标签: python postgresql sqlalchemy

我的桌子上有1001行。

# 1001
print len(Session.query(MyTable).all())

一行在info列中有一个字符串'Recalled',这是一个数组。

# 1
query = Session.query(MyTable)
query = query.filter(MyTable.info.contains(['Recalled']))
print len(query.all())

但是当我否定过滤器时,我得到0结果,而不是像我期望的那样得到1000。

# 0
query = Session.query(MyTable)
query = query.filter(~MyTable.info.contains(['Recalled']))
print len(query.all())

为什么这不起作用?

1 个答案:

答案 0 :(得分:4)

这只是NULL值很棘手。你应该明确地包括它们,比如

from sqlalchemy.sql import or_
query = Session.query(MyTable)
query = query.filter(or_(MyTable.info == None, ~MyTable.info.contains(['Recalled'])))
print len(query.all())