SqlAlchemy 常用查詢器和執行器

2021-09-26 10:48:25 字數 2167 閱讀 6435

過濾器

說明filter()

把過濾器新增到原查詢上,返回乙個新查詢

filter_by()

把等值過濾器新增到原查詢上,返回乙個新查詢

limit

使用指定的值限定原查詢返回的結果

offset()

偏移原查詢返回的結果,返回乙個新查詢

order_by()

根據指定條件對原查詢結果進行排序,返回乙個新查詢

group_by()

根據指定條件對原查詢結果進行分組,返回乙個新查詢

方法說明

all()

以列表形式返回查詢的所有結果

first()

返回查詢的第乙個結果,如果未查到,返回none

first_or_404()

返回查詢的第乙個結果,如果未查到,返回404

get()

返回指定主鍵對應的行,如不存在,返回none

get_or_404()

返回指定主鍵對應的行,如不存在,返回404

count()

返回查詢結果的數量

paginate()

返回乙個paginate物件,它包含指定範圍內的結果

查詢所有使用者資料

user.query.all()

查詢有多少個使用者

user.query.count()

查詢第1個使用者

user.query.first()

user.query.get(1) # 根據id查詢

查詢id為4的使用者[3種方式]

user.query.get(4)

user.query.filter_by(id=4).all() # 簡單查詢 使用關鍵字實參的形式來設定欄位名

user.query.filter(user.id == 4).all() # 複雜查詢 使用恒等式等其他形式來設定條件

查詢名字結尾字元為g的所有使用者[開始 / 包含]

user.query.filter(user.name.endswith("g")).all()

user.query.filter(user.name.startswith("w")).all()

user.query.filter(user.name.contains("n")).all()

user.query.filter(user.name.like("%n%g")).all() 模糊查詢

查詢名字和郵箱都以li開頭的所有使用者[2種方式]

user.query.filter(user.name.startswith("li"), user.email.startswith("li")).all()

from sqlalchemy import and_

user.query.filter(and_(user.name.startswith("li"), user.email.startswith("li"))).all()

查詢age是25 或者 `email`以`itheima.com`結尾的所有使用者

from sqlalchemy import or_

user.query.filter(or_(user.age == 25, user.email.endswith("itheima.com"))).all()

查詢名字不等於wang的所有使用者[2種方式]

from sqlalchemy import not_

user.query.filter(not_(user.name == "wang")).all()

user.query.filter(user.name != "wang").all()

查詢id為[1, 3, 5, 7, 9]的使用者

user.query.filter(user.id.in_([1, 3, 5, 7, 9])).all()

所有使用者先按年齡從小到大, 再按id從大到小排序, 取前5個

user.query.order_by(user.age, user.id.desc()).limit(5).all()

分頁查詢, 每頁10個, 查詢第2頁的資料

pn = user.query.paginate(2, 10)

pn.items 獲取該頁的資料

pn.page 獲取當前的頁碼

pn.pages 獲取總頁數

SQLAlchemy複雜查詢

最近個人用python flask搞了乙個小專案,orm用到的是sqlalchemy。sqlalchemy的查詢方式非常靈活,你所能想像到的複雜sql 語句,基本上都可以實現。這裡簡單的總結一下常用的查詢技巧。多條件組合,可以用and or 實現。最外層時,and 可以省略,預設用逗號分開條件。db...

sqlalchemy的關聯子查詢

sqlalchemy也算是用過好幾年了,不過一直都用著其中相對簡單的一小部分,最近寫個程式碰到個問題,需要作乙個關聯子查詢,類似這樣的sql語句 select master.select count from detail where detail.parentid master.id and de...

SQLAlchemy 查詢(限制,偏移,排序)

先對所要查詢的表進行排序,然後是所要查詢的內容newslist news.query order by db.desc news.n id filter by n is del false 查詢兩張表,不需要外來鍵result1 jobfair.query join company,jobfair....