SQLAlchemy教程

SQLAlchemy 使用连接

在本章中,我们将学习如何在 SQLAlchemy 中使用联接。
连接的效果是通过在 select() 构造的 columns 子句where 子句 中放置两个表来实现的。现在我们使用 join() 和 outerjoin() 方法。
join() 方法返回一个从一个表对象到另一个表对象的连接对象。
join(right, onclause = None, isouter = false, full = false)
上面代码中提到的参数的作用如下-
right-连接的右侧;这是任何 Table 对象 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')
]
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4