6DjangoORM模型類總的基礎欄位及字段選項

2022-09-14 19:30:16 字數 3182 閱讀 6623

一,熟悉djangoorm模型層:

django使用mysql資料庫首先需要安裝pymysql驅動和mysqlclient,然後還需在django工程同名的子目錄init.py檔案中新增如下語句,即:讓pymysql以mysqldb的執行模式和django的orm對接執行

from

pymysql impore install_as_mysqldb

install_as_mysqkdb()

或:

import pymysql

pymysql.install_as_mysqldb()

練習:1建立資料庫:

mysql> create database mysite3 default character set utf8mb4 default collate utf8mb4_general_ci;

2在django中配置資料庫:

databases =

}

orm中,乙個模型類就代表資料庫中的一張表,模型類中的每乙個類屬性就是資料表裡的每乙個字段,

下面通過乙個模型示例了解orm與資料庫的對應關係:

'bookstore',

]3在django中編寫模型類:

解釋:書名:定義此注釋後,djangoadmin後台會顯示這個名字,不定義則會顯示欄位名:

decimalfield:和小數相關用到的型別,它有2個必須定義的引數,max_digits表示精度,decimal_places表示保留幾位小數,例如:max_digits=7就表示總精度7個0,即:0000000

decimal_places=2就表示兩位小數,即:00000.00

而00000.00就表示萬元級別的,最高就是99999.99

class

book(models.model):

title = models.charfield("

書名",max_length=50,default=''

) price = models.decimalfield('

定價', max_digits=7,decimal_places=2,default=0.0)

4同步資料庫:

python manage.py makemigrations #

生成遷移檔案

python manage.py migrate #

執行遷移指令碼

二,orm基礎字段:

booleanfield()布林型:對應mysql資料庫型別tinyint(1),在資料庫中用1或0來表示true和false

charfield()字串型別:對應資料庫型別varchar,注意必須要指定max_length引數值

datefield()日期型別:對應資料庫date表示日期,它有三個引數(只能有乙個引數)分別是:

auto_now:每次儲存物件時,自動設定該字段值為當前時間(取值true/false)

auto_now_add:當物件第一次被建立時,自動設定值為當前時間(取值true/false)

default:設定當前時間(取值:字串格式時間例如:『2021-11-27』)

理論上每張表都應該設定建立時間和更新時間,如下:

建立時間create_time:auto_now_add=true

更新時間update_time:auto_now=true

datetimefield():對應資料庫datetime(6),表示日期和時間,引數同datefield一樣。

floatfield()浮點:對應的資料庫型別時double,在程式語言中和資料庫中都使用小數表示

decimalfield():對應資料庫decimal(x,y)型別,凡是和錢相關的都使用這個型別,該字段有兩個必須引數:

max_digits:位數總數,包括小數點後的位數,該值必須要大於等於decimal_places

decimal_places:小數點後的數字有多少位

emailfield():對應資料庫型別varchar,存郵箱位址用的字段,程式語言和資料庫使用字串

integerfield():對用資料庫int型別

imagefield():對應資料庫型別varchar(100),屬於字串型別,在資料庫中用於儲存路徑

textfield():對應資料庫longtext型別,表示不定長的字元資料

以上為常用的模型類欄位,還有好多,請參閱官方文件:

field-types

三orm模型字段選項:

primary_key:如果為true則表示該列設定成主鍵

blank:設定為true時,字段可以為空,如果設定為false,建議新增預設值default。

default:設定所在列的預設值,一般在新增欄位的時候一定要給個預設值,否則程式可能會報錯。如果字元選項出現null等於false的時候,建議都要設定乙個預設值,但dajngo官方建議我們不要輕易使用null選項,因為這個選項在資料庫中有特殊意義,容易為開發中增添很多坑。

db_index:普通索引,宣告當前的字段是不是要新增索引,如果設定為true表示該列增加索引。

unique:表示唯一索引,如果為true則表示該字段在資料庫中的值必須唯一

db_column:自定義欄位名

verbose_name:設定此字段在admin介面上顯示的名稱

示例:

sender_phone = models.charfield(max_length=255, blank=false, null=true, db_index=true, verbose_name='

寄件人**')

null 是針對資料庫而言,如果 null=true, 表示資料庫的該字段可以為空,那麼在新建乙個model物件的時候是不會報錯的!!

blank 是針對表單的,如果 blank=true,表示你的表單填寫該字段的時候可以不填

db_index是建立普通索引

使用內部meta類來給模型賦予屬性,meta類下有很多內建的類屬性,可對模型類做一些控制。

1修改表名:

class

booke(models.model):

class

meta:

db_table = '

book

'

6 Django ORM模型運算元據庫

專案中大量使用原生sql語句使得整個專案的 很繁瑣,就會出現很多問題 sql重複性較高,利用率低。大量原始sql語句可能是各種拼接的結果,當資料庫中內容做了修改,需要一一找到對應的sql進行檢查修改,浪費時間,不一定改全。可能存在sql注入的安全隱患問題,使得專案癱瘓。orm的使用會避免以上問題,其...

關於sklearn中各個聚類模型的特點總結

在sklearn中,聚類模型有 k means affinity propagation mean shift spectral culstering ward hierarchical clustering agglomerative clustering dbscan gaussian mixt...

類的總複習

目錄類指的是一系列物件相同的特徵與技能的結合體 先抽象,抽取物件之間相同的特徵與技能 再定義,1.會產生乙個類的命名空間 2.會把類內部的多有名字,扔進該命名空間內 注意 定義類時,就會執行類內部的 若語法不正確,則會報錯 呼叫類會產生乙個物件,呼叫類的過程稱之為類的例項化,物件稱之為類的乙個例項 ...