gpt4 book ai didi

python - 用于非/NULL 值的 SQLAlchemy 过滤器 - 工作 - 但如何将它放在列表中?

转载 作者:行者123 更新时间:2023-12-05 08:36:45 39 4
gpt4 key购买 nike

我想针对列中的 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)

将返回 bar123 的行,但如果 barNULL

相反,您需要提供 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/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com