2013-04-18 6 views
29

ich meine Sitze Tisch für alle Sitze abfragen können, wo es keine zugeordnet invite:Kolben sqlalchemy Abfrage entspricht einer Spalte mit nicht

seats = Seat.query.filter_by(invite=None).all() 

Wenn jedoch für alle Sitze abfragt, zugewiesen eine Einladung haben, bekomme ich ein err:

seats = Seat.query.filter_by(invite!=None).all() 

NameError: name 'invite' is not defined 

Hier ist meine Sitzklasse:

class Seat(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 

    invite_id = db.Column(db.Integer, db.ForeignKey('invite.id')) 
    invite = db.relationship('Invite', 
     backref=db.backref('folks', lazy='dynamic')) 

Wie kann ich für alle Sitze abfragen, wo die Besitzer ist nicht leer?

Dank

Antwort

42

Die filter_by() Methode nimmt eine Folge von Schlüsselwort-Argumente, so dass Sie immer ‚=‘ mit ihm zu verwenden. Sie möchten die filter()-Methode verwenden, die != ermöglicht.

seats = Seat.query.filter(Seat.invite != None).all() 

oder

seats = Seat.query.filter(Seat.invite_id != None).all() 
27

Ich denke, das http://docs.sqlalchemy.org/en/rel_0_9/core/sqlelement.html#sqlalchemy.sql.operators.ColumnOperators.isnot

helfen kann, ist keine

query.filter(User.name == None) 

oder alternativ wenn PEP8/Linters sind ein Anliegen

query.filter(User.name.is_(None))

Ist das nicht keine

query.filter(User.name != None) 

oder alternativ wenn PEP8/Linters sind ein Anliegen

query.filter(User.name.isnot(None))

+1

Sie auch # NOQA – alternative

+0

Ich versuche verwenden filter out keine Werte aus einem Label-Feld, es scheint nicht zu funktionieren: 'q = session.qu ery (Table1.id, (Table2.column1 + Table2.column2) .label ('table2_sum')). filter (qctable2_sum! = None) 'Gibt mir q vor Deklarationsfehler und' q = q.filter (qctable2_sum ! = None) 'gibt mir" Abfrage Objekt hat kein Attribut c Fehler "... – DarthSpeedious

+0

müssen Sie vorher q definieren, um es zu verwenden. Versuchen Sie 'q = session.query (Table1.id, (Table2.column1 + Table2.column2) .label ('table2_sum')) q = q.filter ((Table2.column1 + Table2.column2)! = Keine) ' und ich – bull90

Verwandte Themen