Mar*_*her 3 python mysql database sqlalchemy
我想过滤列中NoneMySQL 方言值或其中的数据。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()
但是,不会返回列NULL中具有该值的所有行。为什么不使用该函数的用法?怎么解决这个问题呢?multiplierNonein_
NULL 比较不等于 NULL,所以
SELECT bar
FROM foo
WHERE bar IN (1, 2, 3 , NULL)
Run Code Online (Sandbox Code Playgroud)
bar将返回is1或2or 的行,但如果is3则不返回。barNULL
相反,您需要提供NULL案例作为案例的替代方案IN。
SELECT bar
FROM foo
WHERE bar IN (1, 2, 3 , NULL)
Run Code Online (Sandbox Code Playgroud)
或者用 SQLAlchemy 术语来说
SELECT bar FROM foo WHERE bar IN (1, 2, 3) OR bar IS NULL
Run Code Online (Sandbox Code Playgroud)
您可以使用列运算符进行比较None(以匹配NULL)。要检查某列是否存在,您可以使用.is_()NULLis_not
如:
result = Foo.filter(
sa.or_(
Foo.bar.in_([1,2,3]),
Foo.bar.is_(None)
)
)
Run Code Online (Sandbox Code Playgroud)
但是,是的,当您使用 in_ 进行过滤时,请听一下 Snakecharmerb。
| 归档时间: |
|
| 查看次数: |
13142 次 |
| 最近记录: |