如何使用Flask-SQLAlchemy查询连接两个表并返回所有列

15

我正在尝试在Flask-SQLAlchemy中从两个表进行连接,我想要来自这两个表的所有列,但如果我执行以下操作:

Company.query.join(Buyer, Buyer.buyer_id == Company.id).all()

我只有来自Company的列(实际上它返回一个Company对象)。

我知道我可以做类似这样的事情:

Company.query.join(Buyer, Buyer.buyer_id == Company.id) \
             .add_columns(Buyer.id, Buyer.name, etc..).all()

在这种情况下,它返回:

(<Company 2>, 1, 'S67FG', etc..)

问题在于我有很多列,而且我不知道如何使用flask-marshmallow将返回的对象进行marshmallow(嵌套字段无法工作)。

是否有一种方法可以从两个表中返回新对象的列? 对于您来说,最好的方式是如何管理这些情况?

任何建议都将不胜感激。谢谢


这个回答解决了你的问题吗?如何在SQLAlchemy JOIN中从两个表返回结果? - ggorlen
1个回答

13

最终,我通过使用这个简单的SQLAlchemy查询实现了这一点:

db.session.query(Company, Buyer).join(Buyer, Buyer.buyer_id == Company.id).all()

它返回:

(<Company 2>, <Buyer 1, 2>)

1
Query.add_entity()Query.with_entities() 也可以使用。 - Ilja Everilä
1
我在我的代码中做了类似于@peterpalace的事情。奇怪的是这样一个看似普遍的东西在文档中很难找到,尽管我猜它在https://docs.sqlalchemy.org/en/latest/orm/tutorial.html#querying-with-joins 的绿色框“如果有多个实体,查询选择什么?”中隐含了意思。使用add_entity()with_entities()是否有优势? - antgel
有没有一种简单的方法将这个对象元组合并成一个 Pydantic 基本模型? - Tony
return在哪里?只需要return query就可以了吗? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接