- Django 對(duì)各種數(shù)據(jù)庫提供了很好的支持昂儒,Django為這些數(shù)據(jù)庫提供了統(tǒng)一的調(diào)用API屯碴,可以根據(jù)不同的業(yè)務(wù)需求選擇不同的數(shù)據(jù)庫。
如需了解更多,請(qǐng)?jiān)L問: https://www.emperinter.info/2022/05/29/django-models/
ORM
- 概述
- 對(duì)象-映射-模型
- 任務(wù)
- 根據(jù)對(duì)象的類型生成表結(jié)構(gòu)
- 將對(duì)象泼疑、列表的操作轉(zhuǎn)換為sql語句
- 將SQL語句查詢的結(jié)果轉(zhuǎn)換為對(duì)象、列表
- 優(yōu)點(diǎn)
- 極大的減輕了開發(fā)人員的工作量荷荤,不需要面對(duì)因數(shù)據(jù)庫的變更而修改代碼
流程
配置數(shù)據(jù)庫
- 在
__init__.py
文件中添加選定的數(shù)據(jù)庫Package退渗。
import pymysql
pymysql.version_info = (2,0,3,"final",0)
pymysql.install_as_MySQLdb()
- 在
settings.py
文件中修改數(shù)據(jù)庫配置。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'sunck', # 數(shù)據(jù)庫名
'USER': 'sunk', # 數(shù)據(jù)庫用戶名
'PASSWORD': 'sunk', # 數(shù)據(jù)庫密碼
'HOST': 'localhost', # 數(shù)據(jù)庫主機(jī)
'PORT': '3306', # 數(shù)據(jù)庫端口
}
}
在models.py 添加模型類
- 一個(gè)模型類都在數(shù)據(jù)庫中對(duì)應(yīng)一張表
定義模型
模型蕴纳、屬性会油、表、字段間的關(guān)系
- 一個(gè)模型類在數(shù)據(jù)庫中對(duì)應(yīng)一張表
- 模型類中定義的屬性古毛,對(duì)應(yīng)模型對(duì)照表中的字段
定義屬性
概述
- Django根據(jù)屬性的類型確定以下信息
- 當(dāng)前選擇的數(shù)據(jù)庫支持字段的類型
- 渲染管理表單時(shí)使用的默認(rèn)html控件
- 在管理站點(diǎn)最低限度的驗(yàn)證
- Django會(huì)為表增加自動(dòng)增加的主鍵列翻翩,每個(gè)模型只能有一個(gè)主鍵列,如果使用選項(xiàng)設(shè)置某屬性為主鍵列后稻薇,則Django不會(huì)再生成默認(rèn)的主鍵列嫂冻。
- 屬性命名限制
- 不能是Python的保留關(guān)鍵字(遵循標(biāo)識(shí)符命名規(guī)則)
- 由于Django的查詢方式,不允許使用連續(xù)的下劃線
庫
- 定義屬性時(shí)塞椎,需要字段類型桨仿,字段類型被定義再
django.db.modles.fields
目錄下,為了方便使用案狠,被導(dǎo)入到django.db.modles
中 - 使用方式:
- 導(dǎo)入
from django.db import models
- 通過
modles.Field
創(chuàng)建字段類型的對(duì)象服傍,賦值給屬性
- 導(dǎo)入
邏輯刪除
- 對(duì)于重要數(shù)據(jù)都做邏輯刪除 ,不能做物理刪除,實(shí)現(xiàn)方法是定義
isDelete
屬性骂铁,類型為BooleanField
,默認(rèn)值為False
吹零。
字段類型
字段類型 | 說明 |
---|---|
AutoField |
一個(gè)根據(jù)實(shí)際ID自動(dòng)增長(zhǎng)的IntergerField,通常不指定从铲,如果不指定一個(gè)主鍵字段將自動(dòng)添加到模型中 |
CharField(max_length=字符長(zhǎng)度) |
字符串瘪校,默認(rèn)的表單樣式是TextInput |
TextField |
大文本字段,一般超過4000字節(jié)使用,默認(rèn)的表單控件是textArea |
IntegerField |
整數(shù) |
DecimalFiled(max_digits=None,decimal_places=None) |
使用Python的Decimal實(shí)例表示的十進(jìn)制浮點(diǎn)數(shù)阱扬,max_digits表示位數(shù)總數(shù)泣懊,decimal_places表示小數(shù)點(diǎn)后的數(shù)字位數(shù)。[[精確的浮點(diǎn)運(yùn)算-Decimal]] |
FloatField |
用Python的Float實(shí)例來表示的浮點(diǎn)數(shù) |
BooleanField |
true/false字段麻惶,此字段的默認(rèn)表單控制是CheckboxInput |
NullBolleanField |
支持null馍刮、true、false三種值 |
DateField([auto_now=False,auto_now_add=False]) |
使用Python的Datetime.date實(shí)例表示的日期窃蹋,auto_now表示每次保存對(duì)象是卡啰,自動(dòng)設(shè)置該字段為當(dāng)前時(shí)間,用于“最后一次修改”的時(shí)間戳警没,它總是使用當(dāng)前日期匈辱,默認(rèn)為False。auto_now_add表示當(dāng)對(duì)象第一次被創(chuàng)建時(shí)自動(dòng)設(shè)置當(dāng)前時(shí)間杀迹,用于創(chuàng)建的時(shí)間戳亡脸,它總是使用當(dāng)前時(shí)間,默認(rèn)為False树酪。說明:該字段默認(rèn)對(duì)于表單控件是一個(gè)TextField浅碾,在管理員站點(diǎn)添加了一個(gè)JavaScript寫的日歷控件,和一個(gè)“Today”的快捷按鈕续语,包含了一個(gè)額外的invalid_date錯(cuò)誤消息鍵垂谢。注意:auto_now_add、auto_now疮茄、defalut這些設(shè)置是相互排斥的滥朱,他們之間的任何組合將會(huì)發(fā)生錯(cuò)誤的結(jié)果。 |
TimeField |
使用Python的datetime娃豹,datetime實(shí)例表示的日期和時(shí)間焚虱,參數(shù)同DateField |
FiledField |
一個(gè)上傳文件的字段 |
ImageField |
繼承了FileField的所有屬性和方法,但對(duì)上傳的對(duì)象進(jìn)行校驗(yàn)懂版,確保它是一個(gè)有效的image |
字段選項(xiàng)(字段參數(shù))
- 概述:
- 通過字段選項(xiàng),可以實(shí)現(xiàn)對(duì)字段的約束
- 在字段對(duì)象是通過關(guān)鍵字參數(shù)指定
- null
- 如果為True躏率,Django將空值已NULL存儲(chǔ)到數(shù)據(jù)庫中躯畴,默認(rèn)是False
- blanke
- 如果為True,則該字段允許為空白薇芝,默認(rèn)值是False
- 注意:
- null是數(shù)據(jù)庫范疇的概念蓬抄,blank是表單驗(yàn)證范疇的
- db_column
- 字段的名稱,如未指定夯到,則使用屬性的名稱
- db_index
- 若值為True嚷缭,則在表中會(huì)為此字段創(chuàng)建索引
- defalut
- 默認(rèn)值
- primary_key
- 若為True,則該字段會(huì)成為模型的主鍵字段
- unique
- 若為True,則該字段的值必須唯一
關(guān)系
- 分類
- ForeignKey:一對(duì)多阅爽,將字段定義在多的端中
- ManyToManyField: 多對(duì)多路幸,將字段定義在兩端中
- OneToOneField:一對(duì)一,將字段定義在任意一端中付翁。
- 用一訪問多:
- 格式: 對(duì)象.模型類小寫_set
- 示例:grade.students_set
- 用一訪問一:
- 格式:對(duì)象.模型類小寫
- 示例:grade.students
- 訪問id:
- 格式:對(duì)象.屬性_id
- 示例:student.sgrade_id
創(chuàng)建模型類
如需了解更多简肴,請(qǐng)?jiān)L問: https://www.emperinter.info/2022/05/29/django-models/