- SQLAlchemy 教程
- SQLAlchemy - 首页
- SQLAlchemy - 简介
- SQLAlchemy Core
- 表达式语言
- 连接数据库
- 创建表
- SQL 表达式
- 执行表达式
- 选择行
- 使用文本SQL
- 使用别名
- 使用 UPDATE 表达式
- 使用 DELETE 表达式
- 使用多个表
- 使用多表更新
- 参数有序更新
- 多表删除
- 使用连接
- 使用连接词
- 使用函数
- 使用集合操作
- SQLAlchemy ORM
- 声明映射
- 创建 Session
- 添加对象
- 使用 Query
- 更新对象
- 应用过滤器
- 过滤器操作符
- 返回列表和标量
- 文本SQL
- 构建关系
- 处理关联对象
- 处理连接
- 常见关系操作符
- 急切加载
- 删除关联对象
- 多对多关系
- 方言
- SQLAlchemy 有用资源
- SQLAlchemy - 快速指南
- SQLAlchemy - 有用资源
- SQLAlchemy - 讨论
SQLAlchemy ORM - 使用 Query
所有由 SQLAlchemy ORM 生成的 SELECT 语句都是由 Query 对象构建的。它提供了一个生成式接口,因此连续的调用会返回一个新的 Query 对象,它是前一个对象的副本,并与之关联了额外的条件和选项。
Query 对象最初是使用 Session 的 query() 方法生成的,如下所示:
q = session.query(mapped class)
以下语句也等同于上述语句:
q = Query(mappedClass, session)
Query 对象具有 all() 方法,该方法以对象列表的形式返回结果集。如果我们在我们的 customers 表上执行它:
result = session.query(Customers).all()
此语句实际上等同于以下 SQL 表达式:
SELECT customers.id AS customers_id, customers.name AS customers_name, customers.address AS customers_address, customers.email AS customers_email FROM customers
可以使用 For 循环遍历结果对象,以获取底层 customers 表中的所有记录。以下是显示 Customers 表中所有记录的完整代码:
from sqlalchemy import Column, Integer, String from sqlalchemy import create_engine engine = create_engine('sqlite:///sales.db', echo = True) from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class Customers(Base): __tablename__ = 'customers' id = Column(Integer, primary_key = True) name = Column(String) address = Column(String) email = Column(String) from sqlalchemy.orm import sessionmaker Session = sessionmaker(bind = engine) session = Session() result = session.query(Customers).all() for row in result: print ("Name: ",row.name, "Address:",row.address, "Email:",row.email)
Python 控制台显示如下记录列表:
Name: Ravi Kumar Address: Station Road Nanded Email: [email protected] Name: Komal Pande Address: Koti, Hyderabad Email: [email protected] Name: Rajender Nath Address: Sector 40, Gurgaon Email: [email protected] Name: S.M.Krishna Address: Budhwar Peth, Pune Email: [email protected]
Query 对象还具有以下有用的方法:
序号 | 方法和描述 |
---|---|
1 | add_columns() 它将一个或多个列表达式添加到要返回的结果列列表中。 |
2 | add_entity() 它将一个映射实体添加到要返回的结果列列表中。 |
3 | count() 它返回此 Query 将返回的行数。 |
4 | delete() 它执行批量删除查询。从数据库中删除此查询匹配的行。 |
5 | distinct() 它对查询应用 DISTINCT 子句并返回新生成的 Query。 |
6 | filter() 它使用 SQL 表达式将给定的过滤条件应用于此 Query 的副本。 |
7 | first() 它返回此 Query 的第一个结果,如果结果不包含任何行则返回 None。 |
8 | get() 它根据给定的主键标识符返回一个实例,提供对拥有 Session 的标识映射的直接访问。 |
9 | group_by() 它将一个或多个 GROUP BY 条件应用于查询并返回新生成的 Query |
10 | join() 它针对此 Query 对象的条件创建一个 SQL JOIN 并生成性地应用,返回新生成的 Query。 |
11 | one() 它返回正好一个结果或引发异常。 |
12 | order_by() 它将一个或多个 ORDER BY 条件应用于查询并返回新生成的 Query。 |
13 | update() 它执行批量更新查询并在数据库中更新此查询匹配的行。 |