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
相关产品推荐
相关产品推荐

