2014-05-02 5 views
6

I have User which has-onePerson. Quindi User.person è un Person.
Sto cercando di ottenere un elenco di User da un elenco di Person.Interrogazione dall'elenco dei relativi in ​​SQLalchemy e Flask

ho provato la seguente:

>>> 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. 

Qual è il modo migliore per ottenere un elenco di User s dove User.person è in quella lista di people?

risposta

11

Come il messaggio di errore utilmente ti dice, è necessario utilizzare in_ contro le chiavi esterne invece:

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

Dal momento che si sta andando ad interrogare sia in ogni caso, potrebbe essere migliore per fare un carico unito e quindi ottenere le persone che utilizzano Python:

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