2016-08-16 3 views
0

Also ich möchte eine for-Schleife in einer Abfrage verwenden und Ergebnisse, wenn ein Datensatz-Feld ist gleich einer Eigenschaft eines Objekts (in einer Liste von Objekten) Wie mache ich das? Dies ist mein Code:Verwenden von For-Schleifen in Sqlalchemy-Abfrage

you = session.query(Users).filter_by(id=login_session['userid']).first() 

friends = session.query(Friends).filter_by(user_id=login_session['userid']).all() 

dashboard = session.query(Markers).filter(Markers.owner == f.friend_id for f in friends).all() 

aber dann bekomme ich diese:

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1687, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1360, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1358, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1344, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "/home/pearadox6/travellr/app.py", line 423, in feed 
    dashboard = session.query(Markers).filter(Markers.owner == f.friend_id for f in friends).all() 
    File "<string>", line 1, in <lambda> 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 51, in generate 
    fn(self, *args[1:], **kw) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 1216, in filter 
    criterion = expression._literal_as_text(criterion) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/expression.py", line 1521, in _literal_as_text 
    "SQL expression object or string expected." 
ArgumentError: SQL expression object or string expected. 

Warum?

Antwort

2

Warum?

session.query(Markers).filter(Markers.owner == f.friend_id for f in friends).all() 

Verwenden in_ mit einer Liste statt:

Da kann man nicht ein Generator-Objekt als Argument für filter passiert

session.query(Markers).filter(Markers.owner.in_([f.friend_id for f in friends)]).all() 
+0

Dank! es funktionierte..... – ryanwaite28