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

标签 python mysql database sqlalchemy

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

相关文章:

使用 Py.Test 进行单元测试的 Python Mocking

mysql - Mysqli准备语句问题

php - 基于 MySQL 查询中的 If Else 语句的自定义 CSS

mysql - 在 BASH 脚本中使用变量创建 MySQL 数据库

sql-server - 是否可以限制 SQL Server 仅在选择某些代码时才执行代码?

javascript - 无法在本地连接到 RethinkDB。获取 "rdp protocol port (bad magic number)"

python - Python 中的抽象方法继承

python - 为什么Python使用Karatsuba算法进行乘法? FFT不是更快吗?

python - 如何在youtube api中跨多个 channel 搜索内容?

php - PHP 显示结果中的总列数