我有User哪个has-one Person。所以User.person是Person。
我正试图从一个User列表中获得一个Person列表。
我尝试了以下几点:
>>> 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列表的最佳方法是什么?User.person在people列表中的位置
发布于 2014-05-02 20:14:33
正如错误消息有益地告诉您的那样,您需要对外键使用in_:
User.query.join(User.person).filter(Person.id.in_(p.id for p in people)).all()因为无论如何您都要查询,所以最好是执行一个联合加载,然后让人员使用Python:
people = Person.query.join(Person.user).options(db.contains_eager(Person.user)).limit(3).all()
users = [p.user for p in people]发布于 2020-05-27 09:46:39
还可以将生成器与or_一起使用。
from sqlalchemy.sql import or_
people = Person.query.filter().limit(3)
cond = or_(*[User.person == person for person in people])
User.query.filter(cond).all()当您尝试使用已经接收到的对象(例如状态)的筛选器请求记录时,这可能非常有用。
https://stackoverflow.com/questions/23436095
复制相似问题