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

它執行批次更新查詢並在資料庫中更新此查詢匹配的行。

廣告

© . All rights reserved.