python - 使用 SQLAlchemy 中的多个表的列返回查询

标签 python sql sqlalchemy

我一直没能找到这个问题的答案,但我确信它一定在某个地方。 我的问题类似于这个问题:sqlalchemy: how to join several tables by one query?

但我需要一个查询结果,而不是一个元组。我无权访问模型,因此无法更改它,也无法修改函数以使用元组。

我有两个表,UserInformationMemberInformation,它们都有一个外键并且与 Principal 有关系,但彼此之间没有关系。

如何在一次查询中获取两个表中的所有记录和列? 我试过:

query = DBSession.query(MemberInformation).join(UserInformation, MemberInformation.pId == UserInformation.pId)

但它只返回 MemberInformation 的列

和:

query = DBSession.query(MemberInformation, UserInformation).join(UserInformation, MemberInformation.pId == UserInformation.pId)

但这会返回一个元组。

我在这里错过了什么?

最佳答案

老问题,但值得回答,因为我看到它有很多观看事件。

您需要创建一个关系,然后告诉 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/

相关文章:

python - 双向链表的长度实现,python

python - Pandas 数据帧 : Is there a difference in performance in replacing values by column and row?

python - ttk.combobox 选择列表

php - 阻止 PHP PDO 清除每行提取的变量

python - sqlalchemy,选择具有所有标签的对象

python - 如何动态创建 SQLAlchemy 列

python - SQLAlchemy - 再次运行自动加载

python - 调用 sys.exit() 后不触发 atexit

mysql - 在sql中使用两个检查约束

php - 给定用户名时,根据分数从无序的 MySql 数据库中获取排名