Django ORM模型學習筆記(一)

2021-09-22 12:59:17 字數 4414 閱讀 7166

如果想要先在django專案中建立資料表然後匯入資料庫中,此部落格可作為參考

首先看乙個例子:

from django.db import models

class

address

(models.model)

: address_id = models.autofield(primary_key=

true

) name = models.charfield(max_length=10)

phone = models.charfield(max_length=11)

address = models.charfield(max_length=

100)

door_card = models.charfield(max_length=40)

user = models.foreignkey(

'userinformation'

, models.do_nothing)

class

meta

: managed =

false

db_table =

'address'

需要匯入models庫:from django.db import models

使用class來新建類,類中引數為models.model

autofield:

對映到資料庫中是 int 型別,可以有自動增長的特性。一般不需要使用這個型別,如果不指定主鍵,那麼模型會自動的生成乙個叫做 id 的自動增長的主鍵。如果你想指定乙個其他名字的並且具有自動增長的主鍵,使用 autofield 也是可以的。

bigautofield:

64位的整形,類似於 autofield ,只不過是產生的資料的範圍是從1-9223372036854775807 。

booleanfield:

在模型層面接收的是 true/false 。在資料庫層面是 tinyint 型別。如果沒有指定預設值,預設值=是 none 。

charfield:

在資料庫層面是 varchar 型別。在 python 層面就是普通的字串。這個型別在使用的時候必須、要指定最大的長度,也即必須要傳遞 max_length 這個關鍵字引數進去。

datefield:

日期型別。在 python 中是 datetime.date 型別,可以記錄年月日。在對映到資料庫中也是 date 型別。使用這個 field 可以傳遞以下幾個引數:

\1. auto_now :在每次這個資料儲存的時候,都使用當前的時間。比如作為乙個記錄修改日期的字段,可以將這個屬性設定為 true 。

\2. auto_now_add :在每次資料第一次被新增進去的時候,都使用當前的時間。比如作為乙個記錄第一次入庫的字段,可以將這個屬性設定為 true 。

datetimefield:

日期時間型別,類似於 datefield 。不僅僅可以儲存日期,還可以儲存時間。對映到資料庫中是 datetime 型別。這個 field 也可以使用 auto_now 和 auto_now_add 兩個屬性。

timefield:

時間型別。在資料庫中是 time 型別。在 python 中是 datetime.time 型別。

emailfield:

類似於 charfield 。在資料庫底層也是乙個 varchar 型別。最大長度是254個字元。

filefield:

儲存檔案。

imagefield:

儲存檔案。

floatfield:

浮點型別。對映到資料庫中是 float 型別。

integerfield:

整形。值的區間是 -2147483648——2147483647 。

bigintegerfield:

大整形。值的區間是 -9223372036854775808——9223372036854775807 。

positiveintegerfield:

正整形。值的區間是 0——2147483647 。

smallintegerfield:

小整形。值的區間是 -32768——32767 。

positivesmallintegerfield:

正小整形。值的區間是 0——32767 。

textfield:

大量的文字型別。對映到資料庫中是longtext型別。

uuidfield:

只能儲存 uuid 格式的字串。 uuid 是乙個32位的全球唯一的字串,一般用來作為主鍵。

urlfield:

類似於 charfield ,只不過只能用來儲存 url 格式的字串。並且預設的 max_length 是200。

datafield:

decimalfield:

模型中 meta 配置:

對於一些模型級別的配置。我們可以在模型中定義乙個類,叫做 meta 。然後在這個類中新增一些類屬性來控制模型的作用。比如我們想要在資料庫對映的時候使用自己指定的表名,而不是使用模型的名稱。那麼我們可以在 meta 類中新增乙個 db_table 的屬性。

示例**如下:

class

book

(models.model)

: name = models.charfield(max_length=

20,null=

false

) desc = models.charfield(max_length=

100,name=

'description'

,db_column=

"description1"

)class

meta

: db_table =

'book_model'

以下將對 meta 類中的一些常用配置進行解釋。

db_table:

這個模型對映到資料庫中的表名。如果沒有指定這個引數,那麼在對映的時候將會使用模型名來作為預設的表名。

ordering:

設定在提取資料的排序方式。後面章節會講到如何查詢資料。比如我想在查詢資料的時候根據新增的時間排序

那麼示例**如下:

class

book

(models.model)

: name = models.charfield(max_length=

20,null=

false

) desc = models.charfield(max_length=

100,name=

'description'

,db_column=

"description1"

) pub_date = models.datetimefield(auto_now_add=

true

)class

meta

: db_table =

'book_model'

ordering =

['pub_date'

]

Django ORM模型Field介紹及外來鍵使用

常用字段 在django中,定義了一些field來與資料庫表中的字段型別來進行對映。autofield 對映到資料庫中的int型別,可以有自動增長的特性。一般不需要使用這個型別,如果不指定主鍵,那麼模型會自動的生成乙個叫做id的自動增長的主鍵。bigautofield 64位的整型,類似於autof...

6 Django ORM模型運算元據庫

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

Django ORM模型 想說愛你不容易

from django.db import models class person models.model name models.charfield max length 10 varchar 10 在mysql v4中,代表了10個位元組 在mysql v5中,代表了10個字元。除了上面的字元...