Sqlalchemy如何过滤包含Null和整数值的列

Ale*_*ore 14 python flask flask-sqlalchemy

我有一个可以为空的列的表,其中包含两种类型的值Null(默认值)和整数:

class Node(db.Model):
    __tablename__ = "node"
    maintenance = db.Column(db.Integer, nullable=True)
Run Code Online (Sandbox Code Playgroud)

请求就像这样:

maintenance = 1
node_list = Node.query.filter(Node.maintenance != maintenance).all()
Run Code Online (Sandbox Code Playgroud)

我需要选择包含Null0值的所有单元格.

先感谢您!

bak*_*kal 19

我需要选择包含'Null'或'0'值的所有单元格.

使用|的逻辑OR

Node.query.filter((Node.maintenance == None) | (Node.maintenance == 0))
Run Code Online (Sandbox Code Playgroud)

运用 is_(None)

或者,避免使用== None(因为短距离)

Node.query.filter((Node.maintenance.is_(None)) | (Node.maintenance == 0))
Run Code Online (Sandbox Code Playgroud)

运用 or_

或者,这种形式

from sqlalchemy import or_
Node.query.filter(or_(Node.maintenance == None, Node.maintenance == 0))
Run Code Online (Sandbox Code Playgroud)

运用 in_

如果想知道你是否可以in在SQL和Python中使用类似于运算符的东西进行查询,那么你也可以在SQLAlchemy中进行查询,但不幸的是它不适用于None/NULL,但为了说明我们可以看到

Node.query.filter(Node.maintenance.in_([0, 1]))
Run Code Online (Sandbox Code Playgroud)

相当于

Node.query.filter((Node.maintenance == 0) | (Node.maintenance == 1))
Run Code Online (Sandbox Code Playgroud)

  • 来到这里寻找天气的答案“无”可以在“in_”中使用 – +1。 (4认同)