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()

它执行批量更新查询并在数据库中更新此查询匹配的行。

广告