我想针对列中的 None
或 MySQL 方言 NULL
值过滤我的数据。
这很容易做到:
db.query(models.Data).filter(models.Data.multiplier == None).all()
好吧,但我正在构建一种高级筛选和排序功能。因此,我有一个包含要过滤的值的列表,例如:
[1,2,5]
为此过滤我的数据也很容易:
db.query(models.Data).filter(models.Data.multiplier.in_([1,2,5])).all()
但现在我还想在我的列表中允许一个 None
值:
[1,2,5,None]
过滤:
db.query(models.Data).filter(models.Data.multiplier.in_([1,2,5,None])).all()
但是,所有在 multiplier
列中具有 NULL
值的行都NOT 返回。为什么 None
的用法不适用于 in_
函数?如何解决?
最佳答案
NULL
doesn't compare as equal to NULL , 所以
SELECT bar
FROM foo
WHERE bar IN (1, 2, 3 , NULL)
将返回 bar
为 1
或 2
或 3
的行,但如果 bar
是 NULL
。
相反,您需要提供 NULL
案例作为 IN
案例的替代方案。
SELECT bar FROM foo WHERE bar IN (1, 2, 3) OR bar IS NULL
或者用 SQLAlchemy 的术语来说
import sqlalchemy as sa
...
result = (session.query(Foo)
.filter(
sa.or_(
Foo.bar.in_([1, 2, 3]),
Foo.bar == None
)
)
)
关于python - 用于非/NULL 值的 SQLAlchemy 过滤器 - 工作 - 但如何将它放在列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67858428/