【问题标题】:SQLAlchemy join syntax using multiple column names使用多个列名的 SQLAlchemy 连接语法
【发布时间】:2018-12-12 08:58:58
【问题描述】:

这是我要执行的以下 sql 查询,并且可以在命令行上完美运行:

select * from table1 join table2 using (col1, col2)

我不知道如何使用 SQLAlchemy 执行此操作,我们将不胜感激。

表之间没有外键。表格行只能通过匹配多列的值配对。

谢谢!

【问题讨论】:

    标签: python sql sqlite sqlalchemy


    【解决方案1】:

    考虑Entity1映射到table1,Entity2映射到table2:

    rows = session
        .query(Entity1, Entity2)
        .join(Entity2, (Entity1.col1==Entity2.col1) & (Entity1.col2==Entity2.col2))
        .all()
    

    rows 将是一个元组列表,其中rows[][0]Entity1rows[][1]Entity2。 您可以使用.join(),然后使用第二个参数指定连接条件。如果省略连接条件,则单独使用 .query() 方法会在 table1 和 table2 之间生成交叉连接。

    【讨论】:

    • 如果我想确保 Entity2 中的所有其他列都包含在连接之后,我必须对该命令进行什么调整?
    • @Anthony 你试过session.query(Entity1, Entity2).join(...).all() 吗?这将返回一个元组列表。
    • 我更新了我的答案。让我知道现在是否更清楚了。
    • 这似乎可以解决问题。表示每个表结果的元组列表并不完全是我想象的基于 SQL 查询返回的结果。这可能是我很难弄清楚的原因,但这正是我需要提取的数据。谢谢!
    • 重要的是() & ()。我正在尝试使用Entity1.col1==Entity2.col1 and Entity1.col2==Entity2.col2,它没有给出预期的结果,但也没有错误:-/
    猜你喜欢
    • 2021-04-03
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 2023-03-11
    • 2011-12-30
    • 2015-10-26
    • 1970-01-01
    • 2015-01-16
    相关资源
    最近更新 更多