既然我們選擇了使用ORM框架,那就必須熟練掌握其提供的增刪改查方法,在正式編寫(xiě)視圖事前,本節(jié)內(nèi)容我們先在shell環(huán)境中來(lái)了解和熟悉其增刪改查的基礎(chǔ)方法!
插入記錄
這里我們以博客的分類為案例進(jìn)行演示
1、首先設(shè)置環(huán)境變量,進(jìn)入shell環(huán)境
至于如何導(dǎo)出環(huán)境變量請(qǐng)參考《安裝并配置Flask-SQLAlchemy》章節(jié),最后同步數(shù)據(jù)庫(kù)字段相關(guān)內(nèi)容!
2、運(yùn)行如下命令進(jìn)入shell環(huán)境
flask shell
3、導(dǎo)入模型數(shù)據(jù)
>>> from RealProject import db>>> from app.blog.models import Category, Post
插入一條分類記錄
>>> cate = Category(name=’分類一’)>>> db.session.add(cate)>>> db.session.commit()>>> cate
以上就是插入向數(shù)據(jù)庫(kù)插入一條記錄的基本思路:
- 1、實(shí)例化模型的python對(duì)象
- 2、將該實(shí)例化對(duì)象添加到回話 db.session.add(cate)
- 3、提交該會(huì)話 db.session.commit()
查詢記錄
在查詢之前我們先多添加幾條分類數(shù)據(jù)的記錄
- 拓展,批量插入數(shù)據(jù)的幾種方法:http://www.lotdoc.cn/blog/detail/178/
>>> cates = [‘分類二’, ‘分類三’, ‘分類四’]>>> for name in cates:… cate = Category(name=name) … db.session.add(cate)… db.session.commit()…>>> Category.query.all()[, , , ]
查詢最常用方法有:all()、first()、get()、filter()、order_by()
- 按分類名稱檢索
>>> cate1 = Category.query.filter_by(name=’分類一’).first()>>> cate1.id1>>> cate1.name’分類一’
這里如果傳入的分類名稱不存在則返回None!
- 通過(guò)更復(fù)雜的表達(dá)式查詢多個(gè)分類:
>>> Category.query.filter(Category.name.endswith(‘分類’)).all()[]>>> Category.query.filter(Category.name.endswith(‘分類一’)).all() []>>> Category.query.filter(Category.name.endswith(‘2’)).all() []>>> Category.query.filter(Category.name.startswith(‘分’)).all() [, , , ]
模糊匹配某一個(gè)字段,endswith從字段的最后一個(gè)字符開(kāi)始匹配,startswith從第一個(gè)字符開(kāi)始匹配
- 按某字段進(jìn)行排序:
>>> Category.query.order_by(Category.add_date).all()[, , , ]>>> Category.query.order_by(-Category.add_date).all()[, , , ]
- 限制查詢數(shù)量
>>> Category.query.limit(1).all()[]>>> Category.query.limit(2).all() [, ]>>> Category.query.limit(3).all() [, , ]
- 按住鍵查詢
>>> Category.query.get(1)
更新方法
>>> cate_2 = Category.query.get(2)>>> cate_2.name = ‘分類二new’>>> db.session.commit()
刪除記錄
>>> cate = Category.query.get(1)>>> db.session.delete(cate)>>> db.session.commit()
常用的查詢和過(guò)濾方法
過(guò)濾方法 | 說(shuō)明 |
filter() | 使用指定的規(guī)則過(guò)濾記錄,返回新產(chǎn)生的查詢對(duì)象 |
filter_by() | 使用指定規(guī)則過(guò)濾記錄(以關(guān)鍵字表達(dá)式的形式),返回新產(chǎn)生的查詢對(duì)象 |
order_by() | 根據(jù)指定條件對(duì)記錄進(jìn)行排序,返回新產(chǎn)生的查詢對(duì)象 |
group_by() | 根據(jù)指定條件對(duì)記錄進(jìn)行分組,返回新產(chǎn)生的查詢對(duì)象 |
下面是一些常用的查詢方法:
查詢方法 | 說(shuō)明 |
all() | 返回包含所有查詢記錄的列表 |
first() | 返回查詢的第一條記錄,如果未找到,則返回 None |
get(id) | 傳入主鍵值作為參數(shù),返回指定主鍵值的記錄,如果未找到,則返回 None |
count() | 返回查詢結(jié)果的數(shù)量 |
first_or_404() | 返回查詢的第一條記錄,如果未找到,則返回 404 錯(cuò)誤響應(yīng) |
get_or_404(id) | 傳入主鍵值作為參數(shù),返回指定主鍵值得記錄,如果未找到,則返回 404 錯(cuò)誤響應(yīng) |
paginate() | 返回一個(gè) Pagination 對(duì)象,可以對(duì)記錄進(jìn)行分頁(yè)處理 |