前言:本文是學習網易微專業的《python全棧工程師 - Flask高級建站》課程的筆記,歡迎學習交流。同時感謝老師們的精彩傳授!
一、課程目標
- 數據庫入門
- 不懂數據庫的救星:ORM
- flask shell環境
- 保存數據
二、詳情解讀
2.1.數據庫入門
2.1.1.數據庫用來存儲數據,根據存儲方式不同分爲:
1.關係型數據庫 - 以文件方式永久的存儲到磁盤
2.非關係型數據庫 - 存儲在內存,訪問速度很快,通常用來做隊列,緩存之類的服務
2.1.2.關係型數據庫存儲方式:
表中的每一行由多個字段組成,代表一個用戶,這在數據庫設計中,一個用戶表述爲一個實體
2.1.3.一個數據庫包含多張表:
如何提高數據庫的性能是我們學習的重點!
2.1.4.數據庫軟件:
1.數據庫軟件提供的是數據庫支持服務,有很多產品,比如sqlite、mysql、mssql、oracle
2.一般的關係型數據庫都需要先啓動一個數據庫服務器
3.sqlite
是一個輕量的文本數據庫,python
自帶,無需安裝,也無需啓動服務器
4.python
需要使用對應的數據庫客戶端模塊才能訪問數據庫
5.所有的關係型數據庫都使用SQL
語言對數據庫進行CURD
操作(創建,更新,讀取,刪除)
2.2.ORM與SQLAlchemy
2.2.1.ORM是什麼
ORM
是Object-Relational Mapping
縮寫,對象與關係型數據庫映射關係。通過ORM
操作數據庫,並不需要通過數據庫的SQL
語言進行,只要對Python
的數據對象執行相關方法即可,比如添加一條記錄,user.add()
2.2.2.SQLAlchemy是什麼
SQLAlchemy
是一款ORM
具體實現的庫。在flask
中,可以使用flask_sqlalchemy
插件,插件安裝:
pip install flask-sqlalchemy
安裝成功後,會生成名爲flask_sqlalchemy
模塊,資料查詢:https://pypi.org/project/Flask-SQLAlchemy/
2.3.配置SQLAlchemy
2.3.1.創建數據庫對象
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 新增配置,否則數據庫會報警告
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
# 配置數據庫
app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:///cms.db"
db = SQLAlchemy(app)
2.3.2.SQLite數據庫管理軟件
爲了方便觀察創建數據表的過程,可以安裝SQLite管理模塊。安裝:
pip install sqlite-web
這是一款通過web界面的方式管理數據庫。安裝後,使用:sqlite_web SQLite數據庫文件路徑
,即可管理數據庫。
2.4.創建數據模型Model
2.4.1.定義數據表模型
自定義模型繼承自db.Model
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String)
password = db.Column(db.String)
realname = db.Column(db.String)
age = db.Column(db.Integer)
db.Column
(字段類型,可選參數):
字段類型 | 標識 |
---|---|
整型 | Integer |
字符串型 | String |
文本型 | Text |
日期 | DateTime |
是否爲主鍵 | primary_key |
2.4.2.進入flask shell環境創建數據表
創建完模型後,只是創建了Python
對象,但是並沒有創建數據表。還需要通過db.create_all()
創建數據表
# flask shell
>>> from app import db
>>> db.create_all()
2.5.保存數據
通過實例化模型對象即可創建一個新的對象(C - 添加記錄)
Step1 - 實例對象
:
user1 = User(username = "wanger", password = "123456", realname="王二")
user2 = User(username = "zhangsan", password = "123456", realname = "zhangsan")
Step2 - 提交到數據庫
:
創建後,db.session
對象可以將創建的記錄保存到數據庫
db.session.add(user1)
db.session.add(user2)
db.session.commit()
2.6.ORM的好處
2.6.1.ORM與SQL操作對比:
#SQL
insert into table(username, password, realname) values("", "", "") ;
select * from table where id = 1
# ORM
user1 = User("wanger", "123456", "王二")
User.query.get(1)
2.6.2.SQLAlchemy開發優勢
使用原生的SQL
開發WEB
會有一些如下問題:
1.數據庫產品多,SQL
語句可能有一定的差異,更換數據庫可能導致代碼重構
2.封裝性不夠,重複代碼多,代碼裏遍佈sql
語句,不夠優雅
3.安全性不夠,可能會有注入漏洞
ORM
對SQL
操作進行了封裝:
1.更換數據庫只要更換數據庫源,無需改動代碼。
2.對數據庫的操作轉爲對Python
對象(Model
)的操作。
3.提供了更好的安全性。
三、課程小結
- 數據庫
數據庫有兩大分類:關係型數據庫和非關係型數據庫。關係型數據庫是將數據存儲到硬盤上,它的存儲優點是比較穩定,永久性的存儲;非關係型是將數據存儲在內存中,它的特點是訪問速度快,但是不穩定,可能會丟失數據。 - ORM
數據庫對普通人而言有難度,通過ORM
對數據庫的操作進行封裝,將它轉變爲對數據對象模型的操作。在python
中,有sqlalchemy
模塊對數據庫進行操作,在flask
中有一個flask-sqlalchemy
插件可以使用 - 數據對象模型