python - 从 SQLalchemy 和 Flask 中的相关列表中查询

标签 python flask sqlalchemy flask-sqlalchemy

我有 Userhas-one Person。所以 User.person 是一个 Person
我正在尝试从 Person 列表中获取 User 列表。

我尝试了以下方法:

>>> 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 列表的最佳方法是什么?

最佳答案

正如错误消息告诉您的那样,您需要对外键使用 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]

关于python - 从 SQLalchemy 和 Flask 中的相关列表中查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23436095/

相关文章:

python - 如何制作跨模块变量?

python - 使用 docker 部署处理 flask 中的环境变量

python - 返回 Basequery 对象,而不是从 sqlalchemy query.filter 中返回模型对象

postgresql - 使用 sqlalchemy orm 过滤数据库列中的一系列值

sqlalchemy - 无法从命令行导入 ZopeTransactionExtension

python - 如何使用 Python 在 Redis 缓存中设置由同一列名下的多行组成的值

python - (Pyrebase) 错误 : orderBy must be a valid JSON encoded path

javascript - Jinja2 不在 javascript/html 中渲染引号或 amp;安全过滤器无法解决

python - flask 邮件 AttributeError : 'function' object has no attribute 'send'

python - ">"无法将 python 命令的输出定向到文件