📅  最后修改于: 2020-11-27 07:39:34             🧑  作者: Mango
在本章中,我们将学习如何在SQLAlchemy中使用Joins。
只需将两个表放在select()构造的column子句或where子句中即可达到连接的效果。现在,我们使用join()和externaljoin()方法。
join()方法将一个连接对象从一个表对象返回到另一个表对象。
join(right, onclause = None, isouter = False, full = False)
上面代码中提到的参数的功能如下-
右-连接的右侧;这是任何表对象
onclause-表示联接的ON子句的SQL表达式。如果保留为None,它将尝试基于外键关系联接两个表
isouter-如果为True,则呈现LEFT OUTER JOIN,而不是JOIN
full-如果为True,则呈现FULL OUTER JOIN,而不是LEFT OUTER JOIN
例如,以下使用join()方法将自动基于外键导致连接。
>>> print(students.join(addresses))
这等效于以下SQL表达式-
students JOIN addresses ON students.id = addresses.st_id
您可以明确提及加入条件,如下所示:
j = students.join(addresses, students.c.id == addresses.c.st_id)
如果我们现在使用以下联接将以下构造构建为以下选择:
stmt = select([students]).select_from(j)
这将导致以下SQL表达式-
SELECT students.id, students.name, students.lastname
FROM students JOIN addresses ON students.id = addresses.st_id
如果使用表示引擎的连接执行该语句,则将显示属于所选列的数据。完整的代码如下-
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, ForeignKey
engine = create_engine('sqlite:///college.db', echo = True)
meta = MetaData()
conn = engine.connect()
students = Table(
'students', meta,
Column('id', Integer, primary_key = True),
Column('name', String),
Column('lastname', String),
)
addresses = Table(
'addresses', meta,
Column('id', Integer, primary_key = True),
Column('st_id', Integer,ForeignKey('students.id')),
Column('postal_add', String),
Column('email_add', String)
)
from sqlalchemy import join
from sqlalchemy.sql import select
j = students.join(addresses, students.c.id == addresses.c.st_id)
stmt = select([students]).select_from(j)
result = conn.execute(stmt)
result.fetchall()
以下是上述代码的输出-
[
(1, 'Ravi', 'Kapoor'),
(1, 'Ravi', 'Kapoor'),
(3, 'Komal', 'Bhandari'),
(5, 'Priya', 'Rajhans'),
(2, 'Rajiv', 'Khanna')
]