Python學習筆記:6.2.2 數據庫與ORM

前言:本文是學習網易微專業的《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是什麼

ORMObject-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.安全性不夠,可能會有注入漏洞

ORMSQL操作進行了封裝:
1.更換數據庫只要更換數據庫源,無需改動代碼。
2.對數據庫的操作轉爲對Python對象(Model)的操作。
3.提供了更好的安全性。

三、課程小結

  • 數據庫
    數據庫有兩大分類:關係型數據庫和非關係型數據庫。關係型數據庫是將數據存儲到硬盤上,它的存儲優點是比較穩定,永久性的存儲;非關係型是將數據存儲在內存中,它的特點是訪問速度快,但是不穩定,可能會丟失數據。
  • ORM
    數據庫對普通人而言有難度,通過ORM對數據庫的操作進行封裝,將它轉變爲對數據對象模型的操作。在python中,有sqlalchemy模塊對數據庫進行操作,在flask中有一個flask-sqlalchemy插件可以使用
  • 數據對象模型
發佈了99 篇原創文章 · 獲贊 12 · 訪問量 4054
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章