Flask—數據庫_3

接着上次的定義模型。在models.py內寫好Note模型後可以在控制檯查看對應的建表語句:

 

設置URI後

執行

db.create_all()

成功建立了表note。sqlalchemy是不能建立庫的,所以sqlalchemy庫是我手動創建的。

數據庫和表一旦建立後,之後對模型的改動不回自動作用到實際的表中。例如在創建好表後,再在模型中添加新的字段,這時再次調用create_all()並不會更新表的結構。要想讓改動生效,最簡單的辦法是用db.drop_all()刪除數據庫和表,然後再調用create_all()創建。

執行

db.drop_all()

後刪除了表,同樣無法刪除MySQL的數據庫

 

數據庫操作

數據庫的主要操作是CRUD,也就是Create(創建)、Read(讀取/查詢)、Upaate(更新)、Delete(刪除)。和增刪改查一個意思。SQLAlchemy使用數據庫會話來管理數據庫操作,數據庫會話也稱爲事務(transaction)。Flask-SQLAlchemy會自動創建會話,可以用db.session屬性獲取。

數據庫的會話代表一個臨時存儲區,存儲了我們對數據庫做出的改動。我們可以利用add()方法添加新會話或者更新原有的會話。只有對數據庫會話對象調用了commit()方法時,改動纔會被提交。調用rollback()方法則會將添加到會話而沒有提交的改動撤銷。

 

Create

向數據庫添加新記錄可以分爲三步:

  1. 實例化模型,作爲一條記錄
  2. 添加記錄到會話
  3. 提交會話到數據庫

 

例如向之前的數據庫添加三條消息

 

 

 

Read

一個完整的查詢遵循這個模式:

<模型類>.query.<過濾方法>.<查詢方法>

比較常用的查詢方法有

all()-----返回所有記錄

first()-----返回第一條記錄

get()-----返回指定id的記錄

count()-----返回記錄總數

 

通過過濾方法可以獲得更精確的查詢,而且過濾方法可以疊加使用。最基礎的查詢過濾器是filter(),用指定的規則來過濾記錄。

查找body字段爲remember THIS的記錄。

也可以查看對應SQL語句

filter中還有其他常用操作符例如:

like

in

not in

and

或者疊加調用多個filter()

Note.query.filter(Note.body.like('%rem%')).filter(Note.id==1).all()

還有一種方法是使用and_(),需要自己import。

or

 

filter_by()和filter()類似,而且更加簡便。

 

 

Update

賦值給模型類的字段屬性就可以直接改變字段值,調用commit()方法提交會話就完成了更新。

 

 

Delete

刪和增總是十分相似,只需要把add()方法替換成delete()方法。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章