You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLAlchemy <2.0.0(MySQL)中三种空值查询写法的差异

SQLAlchemy <2.0搭配MySQL:三种NULL查询写法的区别

针对你列出的三种查询写法,在SQLAlchemy 2.0.0以下版本搭配MySQL的场景中,具体区别如下:

1. select_stmt.where(table.c.my_column.is_(None))

这是SQLAlchemy官方推荐的标准写法,会直接生成符合SQL规范的WHERE my_column IS NULL语句,完美适配MySQL语法,逻辑清晰无歧义,是查询NULL值的首选方式。

2. select_stmt.where(table.c.my_column == None)

在SQLAlchemy <2.0版本中,框架会自动将== None的逻辑转换为is_(None),最终生成的SQL同样是WHERE my_column IS NULL,执行效果和第一种写法一致。但这种写法不符合Python的PEP8规范(Python中判断变量是否为None应使用is None而非== None),容易和普通Python代码逻辑混淆,官方并不推荐使用。

3. select_stmt.where(table.c.my_column.is_(null()))

这里的null()是SQLAlchemy提供的sql.expression.null()构造函数,用于生成SQL中的NULL常量。这种写法最终生成的SQL也是WHERE my_column IS NULL,和第一种写法完全等价,只是更显式地使用了SQL表达式构造器。写法相对繁琐,适合需要明确使用SQL语法构造逻辑的场景。

总结

  • 执行效果:三种写法在MySQL下生成的SQL完全相同,查询结果没有区别。
  • 推荐优先级:is_(None) > is_(null()) > == None

内容的提问来源于stack exchange,提问作者sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:13:17