【问题标题】:Querying with joins in sql alchemy and avoiding select all在 sql alchemy 中使用连接查询并避免全选
【发布时间】:2017-12-30 14:40:51
【问题描述】:

我想知道是否有一种方法可以结合连接两个表,并仅检索两个实体及其相关列。

我想避免在加入两个表并仅从表 A 中获取列 id 并从表 B 中获取列 address 后执行 select * 之类的操作。 使用python2.7 我听说过名为 with_entities 的 sqlalchemy 功能,但不确定它如何与这种连接混合,让我们从 sqlalchemy tutorial 开始处理这个示例:

u, a  = session.query(User, Address).\
                     filter(User.id==Address.user_id).\
                     filter(Address.email_address=='jack@google.com').\
                     first():

【问题讨论】:

标签: python python-2.7 sqlalchemy


【解决方案1】:

查看Query.join()

id, address  = session.query(A.id, B.address).\
             join(B, B.user_id == A.id).\ 
             filter(A.email_address=='jack@google.com').\
             first()

这可以使用joinouterjoin 来完成,具体取决于用例,连接可以是隐式的或显式的。 .join 第二个参数是显式连接语句。

【讨论】:

  • 如果我在两个模型中具有相同的字段名称,我应该如何查询它?例如,我想从两个模型中引入 address 字段:session.query(A.id, A.address, B.address)....
  • 您需要使用B.address.label('b_address')标记该字段
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
相关资源
最近更新 更多