《方舟:生存進化》免費DLC“失落之島”前瞻,三大新生物曝光
阿新 • • 發佈:2021-10-21
模型層 - 定義
-
回顧Django MTV
-
模型層 - 負責跟資料庫之間進行通訊
Django配置mysql
- 安裝 mysqlclient【版本 mysqlclient1.3.13以上,官網目前為1.4.x】
- 安裝前確認 ubuntu 是否已安裝 python3-dev 和 default-libmysqlclient-dev
- sudo apt list --installed|grep -E 'libmysqlclient-dev|python3-dev'
- 若命令無輸出則需要安裝 - sudo apt-get install python3-dev default-libmysqlclient-dev
- pip install mysqlclient(安裝是在Pycharm中的Terminal中安裝)
- 建立資料庫
- 進入mysql資料庫 執行
- create database 資料庫名 default charset utf8;
- 通常資料庫名跟專案名保持一致
- settings.py裡進行資料庫的配置
- 修改DATABASES配置項的內容,由 sqlite3 變為 mysql
# 在Terminal中進入mysql建立資料庫: mysql -uroot -p create database mysite3 default charset utf8;
# 在 settings.py檔案中78行DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mysite3', 'USER': 'root', 'PASSWORD': '123456', 'HOST': '127.0.0.1', 'PORT': '3306' } }
- ENGINE - 指定資料庫儲存引擎
'django.db.backends.mysql' 'django.db.backends.sqlite3' 'django.db.backends.oracle' 'django.db.backends.postgresql'
- NAME - 指定要連線的資料庫的名稱
- USER - 指定登入到資料庫的使用者名稱
- PASSWORD - 資料庫的名稱
- HOST/PORT - 連線具體資料庫的IP和埠
什麼是模型
- 模型是一個Python類,它是由Django.db.models.Model派生出的一個子類(即要求必須繼承於Django.db.models.Model。繼承了這個類,class就是模型)
- 一個模型類代表資料庫中的一張資料表
- 模型類中每一個類屬性都代表資料庫中的一個欄位
- 模型是資料庫互動的介面,是表示和操作資料庫的方法和方式
ORM框架
- 定義:ORM (Object Relational Mapping) 即物件關係對映,它是一種程式技術,它允許你使用類和物件對資料庫進行操作,從而避免通過SQL語句操作資料庫。
- 作用:
- 建立模型類和表之間的對應關係,允許我們通過面向物件的方式來操作資料庫。
- 根據設計的模型類生成資料庫中的表格。
- 通過簡單的配置就可以進行資料庫的切換。
- 優點:
- 只需要面向物件程式設計,不需要面向資料庫編寫程式碼。
- 對資料庫的操作都轉化成對類屬性和方法的操作。
- 不用編寫各種資料庫的sql語句
- 實現了資料模型與資料庫的解耦,遮蔽了不同資料庫操作上的差異。
- 不在關注用的是mysql、oracle...等資料庫的內部細節。
- 通過簡單的配置就可以輕鬆更換資料庫,而不需要修改程式碼。
- 只需要面向物件程式設計,不需要面向資料庫編寫程式碼。
- 缺點
- 對於複雜業務,使用成本較高。
- 根據物件的操作轉換成SQL語句,根據查詢的結果轉化成物件,在對映過程中有效能損失。
- 對映圖
模型類 - 建立
from django.db import models
class 模型類名(models.Model):
欄位名 = models.欄位型別(欄位選項)
模型示例
- 此示例為新增一個bookstore_book資料表來存放圖書館中書目資訊
1. 新增一個bookstore的app
python manage.py startapp bookstore
2. 新增模型類並註冊app
# file : bookstore/models.py from django.db import models class Book(models.Model): title = models.CharField("書名",max_length=50,default='') # CharField表示字串型別欄位 price = models.DecimalField('定價',max_digits=7,decimal_places=2,default=0.0) # DecimalField引數(最大數目的數字,儲存小數位數的號碼) # 即 一共7位數,小數點在從右往左第二位 00000.00,即最高為萬元
# 在settings.py檔案中新增: INSTALLED_APPS = [ ... 'bookstore', ]
3. 資料庫遷移
- 遷移是Django同步您對模型所做更改(新增欄位,刪除模型等)到您的資料庫模式的方式
- 生成遷移檔案 - 執行python manage.py makemigrations
將應用下的models.py檔案生成一箇中間檔案,並儲存在migrations資料夾中 - 執行遷移指令碼程式 - 執行python manage.py migrate
執行遷移程式實現遷移。將每個應用下的migrations目錄中的中間檔案同步回資料庫 -
此時檢視資料表,發現本來的空表現在已經同步了所有的檔案表到資料庫,包括剛剛建立的bookstore_book表,檢視所有欄位,有class中的所有屬性(欄位):