sqlalchemy:null比较交换性

时间:2015-08-25 16:49:06

标签: python sqlalchemy

我偶然发现了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不可交换?目的是什么?

1 个答案:

答案 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