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

bar*_*ard 4 python postgresql sqlalchemy

我的表中有 1001 行。

# 1001
print len(Session.query(MyTable).all())
Run Code Online (Sandbox Code Playgroud)

一行在列中包含字符串“Recall” info,这是一个数组。

# 1
query = Session.query(MyTable)
query = query.filter(MyTable.info.contains(['Recalled']))
print len(query.all())
Run Code Online (Sandbox Code Playgroud)

但是当我否定过滤器时,我得到 0 个结果,而不是我预期的 1000 个。

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

为什么这不起作用?

Ian*_*son 8

这只是 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())
Run Code Online (Sandbox Code Playgroud)