使用多个列名的 SQLAlchemy 连接语法

Ant*_*ony 1 python sql sqlite sqlalchemy

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

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

我无法弄清楚如何使用 SQLAlchemy 执行此操作,任何帮助将不胜感激。

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

谢谢!

Hei*_*its 10

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

rows = session
    .query(Entity1, Entity2)
    .join(Entity2, (Entity1.col1==Entity2.col1) & (Entity1.col2==Entity2.col2))
    .all()
Run Code Online (Sandbox Code Playgroud)

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

  • 重要的是`() & ()`。我尝试使用 `Entity1.col1==Entity2.col1 和 Entity1.col2==Entity2.col2` ,它没有给出预期的结果,但也没有错误:-/ (2认同)