Flask入門之SQLAlchemy數據庫鏈接操做(第15講)

1、庫安裝

Flask-SQLAlchemy    2
SQLAlchemy    1.0.8

2、進入venv

3、切換到項目Sample\ 文件夾,進入manager.py 的shell

python manager.py shell

4、建立data.sqlite數據庫

from app import db
from app import models
db.create_all()

  執行完最後一條命令後,在Sample\app下就會生成一個data.sqlite文件html

 

5、在Pycharm中導入數據庫,方即可視化

  Data Source -> Sqlite(Xerial)python

  

  而後進行以下操做sql

  

  點擊OK後,會發現已經導入成功了shell

  

 

6、在shell模式下操做數據

  1. 增(寫入數據)

>>> from app import db
>>> from app import models
>>> from app.models import User,Role
>>> admins = Role(name='administrators')
>>> mod = Role(name='moderator')
>>> db.session.add(admins)
>>> db.session.add(mod)
>>> db.session.commit()

#或者兩條一塊兒添加
#db.session.add([admins,mod])

 

  注意,對數據庫增刪改查,都必須進行commit()方法才能寫入數據庫。數據庫

  如今來查看下,到底有沒有寫入?雙擊roles表,看到了咱們寫入的兩行記錄flask

 

  2. 刪(刪除數據)

# 說明一下:表的每行記錄都是一個對象
# 例如上面:admins和mod都是對象,name是其屬性

>>> admins.name
u'administrators'

# 爲何說明這點,由於刪除行就是刪除對象

>>> db.session.delete(admins)
>>> db.session.commit()

# 刪除成功

  3.改(修改數據)  

# 經過對屬性從新賦值,添加,提交事務進行修改數據

mod.name='moderators-new'
db.session.add(mod)
db.session.commit()

 

 

  4. 查(查詢數據)

# query返回的是包含全部記錄的查詢對象(BaseQuery)
>>> Role.query
<flask_sqlalchemy.BaseQuery object at 0x0000000004936E10>

# query以後若是須要對記錄進行條件篩選,要加上過濾函數,返回過濾後的查詢對象(BaseQuery),能夠屢次執行過濾函數
>>> Role.query.filter_by(name='admins')
<flask_sqlalchemy.BaseQuery object at 0x0000000004A2C438>

# 過濾函數以後,加執行函數,返回是記錄對象(若是是多行怎麼辦),賦值爲一個對象名Admin
>>> Role.query.filter_by(name='administrators').first()
<app.models.Role object at 0x0000000004A13F98>

#Admin對象的屬性,就至關於單元格的值
>>> Admin = Role.query.filter_by(name='administrators').first()
>>> Admin.name
u'administrators'

 

 

  5. 表之間的關聯

還記得咱們以前定義models.py中的Role和User類時,那個relationship嗎,關鍵是參數backrefsession

先來看看咱們Role表中的對象admins,name=administrator,id爲3app

咱們知道這個Role表中的id和User表中的role_id(外鍵)是對應鏈接的。函數

那咱們在往User表寫入數據的時候,還要寫入對應的role_id,有個一步到位的方法,就是把Role行的對象做爲參數傳給定義類時backref的值(這裏是role)spa

他就會自動獲取id,並傳給role_id

  執行代碼

>>> Bikmin = User(name='Bikmin',roles=admins)
>>> db.session.add(Bikmin)
>>> db.session.commit()

  看看效果,role_id爲3,對應上了

 

 

  這裏說一下,query()和get()的區別

1. query() 返回全部記錄的查詢對象

2. get() 使用的主鍵查詢

  示例

>>> Role.query.get(2).name
u'moderator'

 

返回的是moderator,和id同樣

 

   要講SQLAlchemy查詢語句轉成原生的SQL語句,只需用str()便可

str(Role.query.filter_by(name='administrators').all())

 

  

   若是在第一次使用shell會話的時候,建立了行的Python對象,那麼再關閉Shell後,再打開,這些對象不能再使用,必須從新建立

admins = Role.query.filter_by(name='administrators').first()

 

 

 

參考文章:選擇(Select),插入(Insert), 刪除(Delete)

相關文章
相關標籤/搜索