我偶然发现了sqlalchemy的这种行为:
>>> from sqlalchemy import Column, null
>>> print(Column("x") == null())
x IS NULL
>>> print(Column("x") == None)
x IS NULL
>>> print(null() == Column("x"))
NULL = x
>>> print(None == Column("x"))
x IS NULL
有人解释为什么==
在使用null()
时None
不可交换?目的是什么?
答案 0 :(得分:1)
首先,请查看Identity vs. Equailty,了解您的None
条件同时返回x IS NULL
的原因。
null()
条款返回不同结果的原因是operators
的工作方式。
根据文档,操作符的工作方式如下:
在列上下文中,生成子句a = b。如果目标为None,则生成IS NULL。
说明:
Column("x") == null() # a = b -> b is NullType; returning IS NULL
null() == Column('x') # a = b -> b is ColumnType; not returning IS NULL
有关详细信息,您可以查看Sqlalchemy Docs