2014-05-02 3 views
6

verbundenen Ich habe User die has-onePerson. So ist User.person ein Person.
Ich versuche, eine Liste von User aus einer Liste von Person zu bekommen.Abfrage aus der Liste der in SQLalchemy und Kolben

Ich habe versucht, die folgenden:

>>> people = Person.query.filter().limit(3) 
<flask_sqlalchemy.BaseQuery object at 0x111c69bd0> 

>>> User.query.filter(User.person.in_(people)).all() 
NotImplementedError: in_() not yet supported for relationships. For a simple many-to-one, use in_() against the set of foreign key values. 

Was ist der beste Weg, um eine Liste von User s zu bekommen, wo User.person in dieser Liste von people ist?

Antwort

11

Da die Fehlermeldung Ihnen helfend sagt, müssen Sie in_ gegen den Fremdschlüssel verwenden, anstatt:

User.query.join(User.person).filter(Person.id.in_(p.id for p in people)).all() 

Da Sie für beide sowieso abzufragen gehen, könnten besser sein, eine verbundene Last zu tun und Dann rufen Sie die Leute mit Python:

people = Person.query.join(Person.user).options(db.contains_eager(Person.user)).limit(3).all() 
users = [p.user for p in people] 
Verwandte Themen