SQLAlchemy的增刪改查
1.增加 - C(Create)
- 創建實體類對象,併爲對象的屬性賦值
示例:#每一條數據即一個對象 user = Users() user.username = "wangwc" user.age = 37 ... ...
- 將實體對象保存回數據庫
db.session.add(user)
#針對非查詢操作,必須手動將操作提交回數據庫
db.session.commit() - 配置自動提交操作或數據庫
app.config[‘SQLALCHEMY_COMMIT_ON_TEARDOWN’]=True
當視圖函數執行完畢後,自動提交所有操作到數據庫中
2.查詢 - R(Retrieve)
1.基於 db.session 進行查詢
- db.session.query()
- 參數: 要查詢的列,如果查詢多個列的話使用,隔開,如果要查詢所有
- 示例:
- 查詢 Users實體類中的id,username,age
db.session.query(Users.id,Users.username,Users - 查詢Users實體類中所有的列
db.session.query(Users)
3.查詢Users實體類以及Wife實體類中所有列
db.session.query(Users,Wife)
返回值:
該函數會返回一個Query對象,類型爲BaseQuery
- 查詢 Users實體類中的id,username,age
- 查詢執行函數
目的:在db.session.query()上得到最終的結果
語法:db.session.query(xxx).查詢執行函數()
函數 說明
all() 以列表的方式返回所有數據
first() 以實體對象的方式返回查詢中的第一條數據,
first_or_404() 效果同上,如果沒有數據則響應 404
count() 返回查詢結果的數量 - 查詢過濾器函數
- 作用
在db.session.query() 追加篩選條件 - 語法
db.session.query().查詢過濾器函數().查詢執行函數()
- 作用
過濾器函數 | 作用 |
---|---|
filter() | 指定查詢條件 |
filter_by() | 等值查詢條件中使用 |
limit() | 獲取前幾行數據 |
offset() | 指定結果偏移量 |
order_by() | 排序 |
group_by() | 分組 |
- filter() :構建各種各樣的條件
#1. and示例
db.session.query(Users).filter(Users.age>17).filter(Users.id > 1).all()
db.session.query(Users).filter(Users.age>17,Users.id>1).all()
# 2. or示例
from sqlalchemy import _or
xxx.filter(or_(條件1,條件2))
#3. 模糊查詢 like
db.session.query(Users).filter(Users.email.like("%wang%"))
#in 示例
db.session.query(Users).filter(Users.age.in_([17,30,45])).all()
#between and
db.session.query(Users).filter(Users.age.between(30,45)).all()
- filter_by():只能做單表的等值條件過濾篩選
語法:
db.session.query(XX).filter_by(屬性=值).all()
特點:- 不用實體類.屬性,而直接用屬性名即可
- 等值判斷使用 = , 而不是 ==
- limit() & offset()
- limit(n)
作用:獲取前n行數據
語法:
db.session.query(XX).limit(n).all() - offset(n)
作用:從查詢結果中跳過前n跳數據
語法:
db.session.query(XX).offset(n)
- limit(n)
- order_by()
作用: 排序
示例:
#1. 將Users實體中所有的數據降序排序
db.session.query(Users).order_by("age desc").all()
#2. Users實體中大於18歲的人,按年齡降序排序,如果年齡相同按id升序排序
db.session.query(Users).filter(Users.age > 18).order_by("age desc,id").all()
- group_by():聚合查詢
- 基本的聚合查詢
from sqlalchemy import func
#func對象中提供了所有的聚合函數
聚合函數:
sum() : 求和 , func.sum()
count():
max():
min():
avg():
語法:
db.session.
query(func.聚合函數(實體類.屬性)).all() - 完整的查詢操作
db.session.query(查詢列,聚合列) .filter(條件) # 分組前篩選 - where .group_by('分組') # 分組 - group by .having(條件) # 分組後篩選 - having
- 基本的聚合查詢
2.基於實體類的查詢
實體類.query.查詢過濾器函數().查詢執行函數()
- 查詢Users實體中所有的數據
Users.query.all()
3.修改 - U
步驟:與增加數據類似
1.查
查詢出要修改的實體對象
2.改
通過實體對象.屬性 = 值
3.保存
db.session.add(實體對象)
eg:
#修改 Users 實體中 id 爲 1 的人的年齡爲37
user = db.session.query(Users).filter_by(id=1).first()
user.age = 37
db.session.add(user)
# 創建用戶並添加至數據庫中
user = Users()
user.username = xxx
user.age = xxx
user.email = xxx
db.session.add(user)
4.刪除 - D
- 查詢
查詢出要刪除的實體對象 - 刪除
db.session.delete(對象)