flask SQLAlchemy的增刪改查
阿新 • • 發佈:2018-12-15
查詢資料
- query
flask-SQLAlchemy在model類上提供了query屬性。當訪問它時,可以得到一個新的所有記錄的查詢對 象。在使用all()或first()查詢發起之前,可以使用方法filter()或filter_by()來過濾記錄。想要主鍵查詢的,可以用get().
比如資料庫Detail表有如下條目:
id | product | customer | price |
---|---|---|---|
1 | apple | alice | 15 |
2 | orange | tom | 10 |
通過product_id查詢使用者:
d_query =Detail.query.filter_by(product="apple").first()
customer=d_query.customer
查詢不存在的使用者,返回None:
d_query =Detail.query.filter_by(product="banana").first()
d_query is None
查詢複雜表示式,比如傳入多個條件,用filter過濾記錄,filter支援更復雜的查詢方式:
filter和filter_by的對比:
- filter
- 傳入引數的寫法,用類名.列名兩個等號去判斷,只支援filter
d_query =Detail.query.filter(Detail.product=="apple",Detail.customer=="alice").first() price=d_query.price
- 更復雜的語法,比如_and(),or_()等多個條件的查詢,只支援filter.
d_query =Detail.query.filter(and_(Detail.product=="apple",Detail.customer=="alice")).first() price=d_query.price
d_query =Detail.query.filter(_or(Detail.product=="apple",Detail.customer=="alice")).first() price=d_query.price
- filter_by
- 列名單個等號就可以判斷
d_query =Detail.query.filter_by(product="apple").first() customer=d_query.customer
按某種規則對使用者排序:
Detail.query.order_by(Detail.product)
[<Detail u'apple'>,<Detail u'orange'>]
限制返回使用者的數量:
Detail.query.limit(1).all()
[<Detail u'apple'>]
用主鍵查詢使用者:
Detail.query.get(1)
<Detail u'apple'>
增加資料
你的所有模型都應該有個建構函式,使用這些建構函式建立物件,向資料庫插入資料分為3個步驟:
1.建立Python物件
2.把它新增到會話
3.提交會話
在你新增到會話之前,SQLAlchemy基本不考慮把它加到事務中。這時候你可以放棄修改。呼叫add()函式會新增物件。發出一個INSERT語句給資料庫,提交後,可以在後臺數據庫中看到新增資料。
new=Detail("banana","ella","5")
db.session.add(new)
db.session.commit()
修改資料
在物件中修改屬性,然後提交會話。
d_query =Detail.query.filter_by(product="apple").first()
setattr(d_query, 'price', "2")
db.session.commit()
刪除資料
刪除和新增是類似的,把add()換成delete():
d_query =Detail.query.filter_by(product="apple").first()
db.session.delete(d_query)
db.session.commit()