Sqlalchemy 简明教程
SQLAlchemy ORM - Using Query
SQLAlchemy ORM 生成的所有 SELECT 语句都是由 Query 对象构建的。它提供了一个生成接口,因此连续调用会返回一个新的 Query 对象,该对象是前一个对象的副本,并带有与其关联的其他 criteria 和 options。
Query 对象最初是使用 Session 的 query() 方法生成的,如下所示 -
q = session.query(mapped class)
以下语句也相当于上述给出的语句 -
q = Query(mappedClass, session)
此查询对象具有 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: ravi@gmail.com
Name: Komal Pande Address: Koti, Hyderabad Email: komal@gmail.com
Name: Rajender Nath Address: Sector 40, Gurgaon Email: nath@gmail.com
Name: S.M.Krishna Address: Budhwar Peth, Pune Email: smk@gmail.com
Query 对象还具有以下有用的方法 −
Sr.No. |
Method & Description |
1 |
add_columns() 向要返回的结果列列表添加一个或多个列表达式。 |
2 |
add_entity() 向要返回的结果列列表中添加一个映射实体。 |
3 |
count() 返回此查询将返回的行数。 |
4 |
delete() 执行批量删除查询。从数据库中删除与此查询匹配的行。 |
5 |
distinct() 向查询应用 DISTINCT 子句并返回新生成查询。 |
6 |
filter() 使用 SQL 表达式将给定的筛选条件应用于此查询的副本。 |
7 |
first() 返回此查询的第一结果,如果结果不包含任何行,则返回 None。 |
8 |
get() 返回基于给定主键标识符的实例,该标识符提供对所属会话的身份映射的直接访问。 |
9 |
group_by() 向查询应用一个或多个 GROUP BY 标准并返回新生成查询。 |
10 |
join() 针对此查询对象的条件创建 SQL JOIN,并生成性地应用,返回新生成查询。 |
11 |
one() 返回一个结果或引发异常。 |
12 |
order_by() 向查询应用一个或多个 ORDER BY 标准,并返回新生成查询。 |
13 |
update() 执行批量更新查询并更新数据库中与此查询匹配的行。 |