我还没有找到答案,但是我敢肯定它一定在某个地方。
我的问题类似于以下问题:sqlalchemy: how to join several tables by one query?
但是我需要一个查询结果,而不是一个元组。我无权访问模型,因此无法更改它,也无法修改函数以使用元组。
我有两个表UserInformation
和MemberInformation
,它们都有一个外键和与Principal
的关系,但彼此之间没有关系。
如何在一个查询中从两个表中获取所有记录和列?
我试过了:
query = DBSession.query(MemberInformation).join(UserInformation, MemberInformation.pId == UserInformation.pId)
但它只返回MemberInformation的列
和:
query = DBSession.query(MemberInformation, UserInformation).join(UserInformation, MemberInformation.pId == UserInformation.pId)
但这会返回一个元组。
我在这里想念什么?
最佳答案
旧问题,但值得回答,因为我看到它有很多 View 事件。
您需要创建一个关系,然后告诉SQLAlchemy如何加载相关数据。不确定表/关系的外观如何,但是可能看起来像这样:
# Create relationship
MemberInformation.user = relationship(
"UserInformation",
foreign_keys=[MemberInformation.pId],
lazy="joined",
)
# Execute query
query = DBSession.query(MemberInformation) \
.options(joinedload(MemberInformation.user)) \
.all()
# All objects are in memory. Evaluating the following will NOT result in additional
# database interaction
for member in query:
print(f'Member: {member} User: {member.user}')
# member is a MemberInformation object, member.user is a UserInformation object
理想情况下,将在模型中定义关系。但是,如果可以在运行时定义,请列出上面的示例。
关于python - 使用SQLAlchemy中的多个表中的列返回查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35096110/