2014-05-02 5 views
6

में संबंधित सूची से पूछताछ में मेरे पास User है जो has-onePerson है। तो User.person एक Person है।
मैं Person की सूची से User की एक सूची प्राप्त करने का प्रयास कर रहा हूं।SQLalchemy और Flask

मैं निम्नलिखित की कोशिश की:

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

सबसे अच्छा तरीका है जहां User.personpeople की उस सूची में है User रों की एक सूची प्राप्त करने के लिए क्या है?

उत्तर

11

त्रुटि संदेश सहायक आपको बताता है के रूप में, आप के बजाय विदेशी कुंजी के खिलाफ in_ उपयोग करने की आवश्यकता:

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

आप एक में शामिल हो गए लोड करने के लिए दोनों के लिए क्वेरी करने के लिए वैसे भी, बेहतर हो सकता है जा रहे हैं के बाद से और फिर पाइथन का उपयोग करने वाले लोगों को प्राप्त करें:

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