首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从SQLalchemy和烧瓶的相关列表中查询

从SQLalchemy和烧瓶的相关列表中查询
EN

Stack Overflow用户
提问于 2014-05-02 20:05:03
回答 2查看 4.4K关注 0票数 10

我有User哪个has-one Person。所以User.personPerson

我正试图从一个User列表中获得一个Person列表。

我尝试了以下几点:

代码语言:javascript
复制
>>> 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.personpeople列表中的位置

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-02 20:14:33

正如错误消息有益地告诉您的那样,您需要对外键使用in_

代码语言:javascript
复制
User.query.join(User.person).filter(Person.id.in_(p.id for p in people)).all()

因为无论如何您都要查询,所以最好是执行一个联合加载,然后让人员使用Python:

代码语言:javascript
复制
people = Person.query.join(Person.user).options(db.contains_eager(Person.user)).limit(3).all()
users = [p.user for p in people]
票数 23
EN

Stack Overflow用户

发布于 2020-05-27 09:46:39

还可以将生成器与or_一起使用。

代码语言:javascript
复制
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()

当您尝试使用已经接收到的对象(例如状态)的筛选器请求记录时,这可能非常有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23436095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档