1. 程式人生 > >flask SQLAlchemy的增刪改查

flask SQLAlchemy的增刪改查

查詢資料

  • 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()

引用