- 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: 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 物件還具有以下有用的方法:
| 序號 | 方法和描述 |
|---|---|
| 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() 它執行批次更新查詢並在資料庫中更新此查詢匹配的行。 |