目錄
一、簡介
二、ORM框架
1.ORM的介紹
2.ORM 的優點
3.ORM 的缺點
4.ORM 解析過程
三、使用Django進行數據庫開發的步驟
1.定義模型類
1) 數據庫表名
2) 關於主鍵
3)屬性命名限制
4)字段類型
5) 選項
6) 外鍵
7)示例
2.配置
3.模型遷移
模型是有關數據的唯一確定的信息源。它包含要存儲數據的基本字段和行為。通常,每個模型都映射到單個數據庫表。
Django 對各種數據庫提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。
Django 為這些數據庫提供了統一的調用API。 我們可以根據自己業務需求選擇不同的數據庫。
使用Django進行數據庫開發的提示 :
MVT
設計模式中的Model
, 專門負責和數據庫交互.對應(models.py)
Model
中內嵌了ORM框架
, 所以不需要直接面向數據庫編程.模型類和對象
完成數據庫表的增刪改查
.ORM框架
就是把數據庫表的行與相應的對象建立關聯, 互相轉換.使得數據庫的操作面向對象.Django 模型使用自帶的 ORM。
對象關系映射(Object Relational Mapping,簡稱 ORM )用於實現面向對象編程語言裡不同類型系統的數據之間的轉換。
在ORM框架中,它幫我們把類和數據表進行了一個映射,可以讓我們通過類和類對象就能操作它所對應的表格中的數據。ORM框架還有一個功能,它可以根據我們設計的類自動幫我們生成數據庫中的表格,省去了我們自己建表的過程。ORM 在業務邏輯層和數據庫層之間充當了橋梁的作用。
ORM 是通過使用描述對象和數據庫之間的映射的元數據,將程序中的對象自動持久化到數據庫中。
Django根據屬性的類型確定以下信息:
模型類如果未指明表名,Django默認以小寫app應用名_小寫模型類名為數據庫表名。
可通過db_table指明數據庫表名。
django會為表創建自動增長的主鍵列,每個模型只能有一個主鍵列,如果使用選項設置某屬性為主鍵列後django不會再創建自動增長的主鍵列。
默認創建的主鍵列屬性為id,可以使用pk代替,pk全拼為primary key。
pk是主鍵的別名,若主鍵名為id2,那麼pk是id2的別名。
具體語法如下:
屬性=models.字段類型(選項)
null是數據庫范疇的概念,blank是表單驗證范疇的
在設置外鍵時,需要通過on_delete選項指明主表刪除數據時,對於外鍵引用表數據如何處理,在django.db.models中包含了可選常量:
CASCADE級聯,刪除主表數據時連通一起刪除外鍵表中數據
PROTECT保護,通過拋出ProtectedError異常,來阻止刪除主表中被外鍵應用的數據
SET_NULL設置為NULL,僅在該字段null=True允許為null時可用
SET_DEFAULT設置為默認值,僅在該字段設置了默認值時可用
SET()設置為特定值或者調用特定方法
DO_NOTHING不做任何操作,如果數據庫前置指明級聯性,此選項會拋出IntegrityError異常
以下為書籍信息管理的數據關系:書名和人物是 :一對多關系
要先分析出項目中所需要的數據, 然後設計數據庫表.
書籍信息表
人物信息表
定義模型類
根據書籍表結構設計模型類:
根據人物表結構設計模型類:
根據數據庫表的設計
在models.py
中定義模型類,繼承自models.Model
from django.db import models
# Create your models here.
# 准備書籍列表信息的模型類
class BookInfo(models.Model):
# 創建字段,字段類型...
name = models.CharField(max_length=10, verbose_name='名稱')
class Meta:
db_table = 'bookinfo' # 指明數據庫表名
verbose_name = '圖書' # 在admin站點中顯示的名稱
def __str__(self):
"""定義每個數據對象的顯示信息"""
return self.name
# 准備人物列表信息的模型類
class PeopleInfo(models.Model):
GENDER_CHOICES = (
(0, 'male'),
(1, 'female')
)
name = models.CharField(max_length=20, verbose_name='名稱')
gender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性別')
book = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='圖書') # 外鍵
class Meta:
db_table = 'peopleinfo'
verbose_name = '人物信息'
def __str__(self):
return self.name
在settings.py中保存了數據庫的連接配置信息,Django默認初始配置使用sqlite數據庫。
使用MySQL數據庫首先需要安裝驅動程序
pip install PyMySQL
在Django的工程同名子目錄的__init__.py文件中添加如下語句
import pymysql
pymysql.install_as_MySQLdb()
作用是讓Django的ORM能以mysqldb的方式來調用PyMySQL。
先在MySQL中創建數據庫
create database book charset=utf8;
修改DATABASES配置信息
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1', # 數據庫主機
'PORT': 3306, # 數據庫端口
'USER': 'samual', # 數據庫用戶名
'PASSWORD': 'mysql', # 數據庫用戶密碼
'NAME': 'bookmanger' # 數據庫名字
}
}
遷移由兩步完成 :
1.生成遷移文件:根據模型類生成創建表的語句
python manage.py makemigrations
2. 執行遷移:根據第一步生成的語句在數據庫中創建表
python manage.py migrate
在PyCharm中我們可以打開控制台下的【Terminal】來執行遷移命令:
執行遷移文件前:
生成遷移文件後,【migrations】目錄下會生成【0001_initial.py】文件:
執行遷移:
完成後,我們打開MySQL中在指定的數據庫就能看到執行遷移成功的表: