過濾器
說明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....