- SQLAlchemy 教程
- SQLAlchemy - 首頁
- SQLAlchemy - 簡介
- SQLAlchemy Core
- 表示式語言
- 連線資料庫
- 建立表
- SQL 表示式
- 執行表示式
- 選擇行
- 使用文字SQL
- 使用別名
- 使用 UPDATE 表示式
- 使用 DELETE 表示式
- 使用多個表
- 使用多表更新
- 引數有序更新
- 多表刪除
- 使用連線
- 使用連線條件
- 使用函式
- 使用集合操作
- SQLAlchemy ORM
- 宣告對映
- 建立會話
- 新增物件
- 使用查詢
- 更新物件
- 應用過濾器
- 過濾器運算子
- 返回列表和標量值
- 文字SQL
- 構建關係
- 處理相關物件
- 處理連線
- 常見關係運算子
- 急切載入
- 刪除相關物件
- 多對多關係
- 方言
- SQLAlchemy 有用資源
- SQLAlchemy - 快速指南
- SQLAlchemy - 有用資源
- SQLAlchemy - 討論
SQLAlchemy Core - 使用連線條件
連線條件是 SQLAlchemy 模組中的函式,用於實現 SQL 表示式 WHERE 子句中使用的關係運算子。運算子 AND、OR、NOT 等用於組合兩個獨立的邏輯表示式,形成一個複合表示式。一個使用 AND 在 SELECT 語句中的簡單示例如下:
SELECT * from EMPLOYEE WHERE salary>10000 AND age>30
SQLAlchemy 函式 and_()、or_() 和 not_() 分別實現 AND、OR 和 NOT 運算子。
and_() 函式
它生成由 AND 連線的表示式的連線。以下是一個示例,以便更好地理解:
from sqlalchemy import and_
print(
and_(
students.c.name == 'Ravi',
students.c.id <3
)
)
這將轉換為:
students.name = :name_1 AND students.id < :id_1
要在 students 表上使用 and_() 在 select() 結構中,使用以下程式碼行:
stmt = select([students]).where(and_(students.c.name == 'Ravi', students.c.id <3))
將構建以下性質的 SELECT 語句:
SELECT students.id, students.name, students.lastname FROM students WHERE students.name = :name_1 AND students.id < :id_1
顯示上述 SELECT 查詢輸出的完整程式碼如下:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, ForeignKey, select
engine = create_engine('sqlite:///college.db', echo = True)
meta = MetaData()
conn = engine.connect()
students = Table(
'students', meta,
Column('id', Integer, primary_key = True),
Column('name', String),
Column('lastname', String),
)
from sqlalchemy import and_, or_
stmt = select([students]).where(and_(students.c.name == 'Ravi', students.c.id <3))
result = conn.execute(stmt)
print (result.fetchall())
假設 students 表已填充了先前示例中使用的資料,則將選擇以下行:
[(1, 'Ravi', 'Kapoor')]
or_() 函式
它生成由 OR 連線的表示式的連線。我們將使用 or_() 將上述示例中的 stmt 物件替換為以下物件:
stmt = select([students]).where(or_(students.c.name == 'Ravi', students.c.id <3))
這將有效地等效於以下 SELECT 查詢:
SELECT students.id, students.name, students.lastname FROM students WHERE students.name = :name_1 OR students.id < :id_1
一旦你進行替換並執行上述程式碼,結果將是滿足 OR 條件的兩行:
[(1, 'Ravi', 'Kapoor'), (2, 'Rajiv', 'Khanna')]
asc() 函式
它生成一個升序 ORDER BY 子句。該函式將要應用函式的列作為引數。
from sqlalchemy import asc stmt = select([students]).order_by(asc(students.c.name))
該語句實現以下 SQL 表示式:
SELECT students.id, students.name, students.lastname FROM students ORDER BY students.name ASC
以下程式碼按 name 列的升序列出 students 表中的所有記錄:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, ForeignKey, select
engine = create_engine('sqlite:///college.db', echo = True)
meta = MetaData()
conn = engine.connect()
students = Table(
'students', meta,
Column('id', Integer, primary_key = True),
Column('name', String),
Column('lastname', String),
)
from sqlalchemy import asc
stmt = select([students]).order_by(asc(students.c.name))
result = conn.execute(stmt)
for row in result:
print (row)
以上程式碼產生以下輸出:
(4, 'Abdul', 'Sattar') (3, 'Komal', 'Bhandari') (5, 'Priya', 'Rajhans') (2, 'Rajiv', 'Khanna') (1, 'Ravi', 'Kapoor')
desc() 函式
類似地,desc() 函式生成如下降序 ORDER BY 子句:
from sqlalchemy import desc stmt = select([students]).order_by(desc(students.c.lastname))
等效的 SQL 表示式為:
SELECT students.id, students.name, students.lastname FROM students ORDER BY students.lastname DESC
以上程式碼行的輸出為:
(4, 'Abdul', 'Sattar') (5, 'Priya', 'Rajhans') (2, 'Rajiv', 'Khanna') (1, 'Ravi', 'Kapoor') (3, 'Komal', 'Bhandari')
between() 函式
它生成一個 BETWEEN 謂詞子句。這通常用於驗證某個列的值是否落在某個範圍內。例如,以下程式碼選擇 id 列介於 2 和 4 之間的行:
from sqlalchemy import between stmt = select([students]).where(between(students.c.id,2,4)) print (stmt)
生成的 SQL 表示式類似於:
SELECT students.id, students.name, students.lastname FROM students WHERE students.id BETWEEN :id_1 AND :id_2
結果如下:
(2, 'Rajiv', 'Khanna') (3, 'Komal', 'Bhandari') (4, 'Abdul', 'Sattar')
廣告