title: SQLAlchemy對資料基本操作 date: 2017-08-07 15:31:07 tags: [flask,SQLAlchemy,開發]
先前在這篇文章有些建立操作介紹 Mysql安裝和操作(flask)
以下為讀《深入理解Flask》
對各種資料儲存策略有四種基本功能型別:新增,讀取,修改,刪除
增加資料
讀取資料
讀取資料也許是操作種類比較複雜的功能型別
一個簡單的例子
>>> users=User.query.all()
>>> users
[<User 'test'>]
複製程式碼
一些常用語句(可以鏈式呼叫)
User.query.all ##查詢User模型在資料庫中所有行
User.query.h2mit(5).all ##指定行數返回
User.query.first() ##返回一行資料
User.query.filter(User.id == 2).first().name
User.query.get(2).name ##以主鍵獲取,等效於上句
Post.query.paginate(2,10) ##返回2-10的物件,這個設計為了分頁
User.query.filter_by(username="test").all() ##精確過濾
User.query.filter(User.id>1).all() ##user.id大於1的
##filter引數接受任何python表示式
User.query.order_by(User.username).all() ##正向排序
User.query.order_by(User.username.desc()).all() ##反向排序
##order_by控制排序方式
複製程式碼
paginate-Add:假如命令page=Post.query.paginate(2,10)
page.items ##返回這一頁包含資料
page.page ##頁數
page.pages ##總頁數
page.has_prev OR page.has_next ##上一頁或者下一頁是否有資料
複製程式碼
filter-Add: 一些複雜的SQL語句也可以轉化
User.query.filter(
User.username.in_(['test','test1']),
User.password_hash==None
).first()
User.query.filter(
not_(User.password_hash==None)
).first() ##擁有密碼的user
User.query.filter(
or_(not_(User.password_hash==None),User.id>1)
).first() ##組合呼叫
複製程式碼
SQLAlchemy中與None的比較會被當成與NULL比較
修改資料
呼叫update方法更新資料
>>> User.query.filter_by(username="test").update({
'password_hash':'test'
})
1
>>> db.session.commit()
複製程式碼
刪除資料
>>> user=User.query.filter_by(username="test").first()
>>> db.session.delete(user)
>>> db.session.commit()
複製程式碼