2016-05-25 11 views
6

devo tabella con una colonna Null che contiene entrambi i tipi di valori Null (default) e numeri interi:SQLAlchemy come filtrare colonna che contiene sia nullo e numeri interi

class Node(db.Model): 
    __tablename__ = "node" 
    maintenance = db.Column(db.Integer, nullable=True) 

La richiesta è come questo:

maintenance = 1 
node_list = Node.query.filter(Node.maintenance != maintenance).all() 

ho bisogno di selezionare tutte le celle che contengono Null o 0 valori.

Grazie in anticipo!

risposta

8

Devo selezionare tutte le celle che contengono valori "Null" o "0".

Uso | la logica OR

Node.query.filter((Node.maintenance == None) | (Node.maintenance == 0)) 

Uso is_(None)

Oppure, per evitare di utilizzare == None (a causa di linters)

Node.query.filter((Node.maintenance.is_(None)) | (Node.maintenance == 0)) 

Utilizzando or_

Oppure, questa forma

from sqlalchemy import or_ 
Node.query.filter(or_(Node.maintenance == None, Node.maintenance == 0)) 

Utilizzando in_

Se state chiedendo se è possibile interrogare utilizzando qualcosa di simile all'operatore in in SQL e Python, è' Se hai ragione puoi farlo anche in SQLAlchemy, ma sfortunatamente it doesn't work for None/NULL values, ma per illustrare possiamo vedere che

Node.query.filter(Node.maintenance.in_([0, 1])) 

è equivalente a

Node.query.filter((Node.maintenance == 0) | (Node.maintenance == 1)) 
+0

Grazie! Apprezzo molto il vostro aiuto! –

+1

Qui è in cerca di una risposta al tempo in cui 'None' potrebbe essere usato in' in_' - +1. –

Problemi correlati