Django數據庫ORM模型使用(介紹、配置、創建表)!Django的ORM模型如何連接MySQL並創建表? ✧*。٩(ˊᗜˋ*)و✧*。 Django初體驗

介紹ORM

對象關係映射(Object Relational Mapping,簡稱ORM)是通過使用描述對象和數據庫之間映射的元數據,將面嚮對象語言程序中的對象自動持久化到關係數據庫中。
Django中的ORM簡單說就是你調用相應的方法,Django框架會自動幫你轉換成原生SQL進行執行。
經過ORM轉換的SQL語句雖然有一定的性能損壞,不過Django將方法轉換成SQL語句時也會盡力去優化語句,另一方面當今計算機的性能越來越強大的今天,轉換的性能損壞對於大多數服務器來說已經可以忽略不計了。
但ORM模型所帶來的的優勢卻日益突出,特別是代碼的可讀性和代碼維護上。項目越大越能體現出ORM的優越性。

連接MySQL數據庫

使用djangoORM連接MySQL數據庫我們需要安裝mysqlclient這個模塊,如果你在安裝的時候報錯,提示c++庫未安裝可以嘗試從瀏覽器中下載mysqlclient庫並離線安裝。下載地址
如果安裝失敗,就先升級一下pip(一定要保證pip在最新狀態)可以使用清華源升級pippip install --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple pip

配置文件

下載完mysqlclient我們需要在配置文件(settings.py)中進行配置
在DATABASES中添加信息(這裏大小寫敏感,配置名必須大寫)

DATABASES = {
    'default': {
        # 註明使用的數據庫爲MySQL
        'ENGINE': 'django.db.backends.mysql',
        # 使用的數據庫表名
        'NAME': 'django的ORM',
        # 數據庫登陸用戶名
        'USER': 'root',
        # 數據庫登陸密碼
        'PASSWORD': 'root',
        # 數據庫登陸ip
        'HOST': 'localhost',
        # 數據庫端口
        'POST': '3306'
    }
}

創建表

每個APP都會自帶一個models. py文件,這個文件就是APP給你預留用於創建表的文件。下列大致的創建流程。

  1. 在settings.py中,配置好DATABASES,做好數據庫相關的配置。
  2. 以類的形式創建一個表,默認表名爲APP名_類名,此類需要繼承(models.Model)。其中進行Field屬性創建不同屬性的表頭,或者創建外鍵等操作
  3. 生成遷移腳本文件(python manage.py makemigrations),遷移腳本文件會將每次數據庫的變化記錄在migrations文件夾中
  4. 最後將migrations變化的APP的模型映射進入數據庫(python manage.py migrate)
    可以在命令行啓動映射命令,如果你是用pycharm,這可以使用下列方法
    在這裏插入圖片描述

Field屬性介紹

選擇field類型的時候相當於我們在選擇數據的存儲類似
在這裏插入圖片描述
field類型衆多,這麼我們暫時先介紹一些比較常用的類型

field類型 作用
AutoField() 在數據庫中爲int類型,映射到數據庫中是int類型的主鍵,默認長度爲11,有自增特性(Django的ORM創建表時如果沒有主鍵會自動生成表頭爲此類型名稱爲id的主鍵)使用此字段必須傳入primary_key=True
BigAutoField() 在數據庫中爲bigint類型,用於長整數類型的主鍵,長度爲20,有自增特性與AutoField不能共存。使用此字段必須傳入primary_key=True,用作爲主鍵的還有個SmallAutoField()和此方法類似
BooleanField() 在數據庫中爲tinyint類型,長度爲1,在模型層面,此類型接收的是True或Flast,當沒有指定默認值時默認爲None
CharField() 在數據庫中爲varchar類型,在模型中爲字符串類型,此類型必須指定長度(max_length)
DateTimeField() 在數據庫中爲datatime類型,用於存儲日期時間,因爲Django中有時區概念,下方會詳解此類型。
EmailField() 在數據庫中爲varchar類型,用於存儲郵箱,默認長度爲254,且不能爲空(配合表單會檢測郵箱合法性)
FileField() 在數據庫中爲varchar類型,用於存儲文件(存儲的文件路徑)
ImageField() 在數據庫中爲varchar類型,用於存儲圖片(存儲圖標需要安裝pip install Pillow)
FloatField() 在數據庫中爲double類型,浮點類型,用於存儲浮點數
SmallIntegerField() 在數據庫中爲smallint類型,默認長度爲6的短整數類型,值的區間在-32768, 32767
IntegetField() 在數據庫中爲int類型,默認長度爲11的整數類型,值的區間在-2147483648, 2147483647
BigIntegerField() 在數據庫中爲bigint類型,默認長度爲20的長整數類型,值的區間在-9223372036854775808, 9223372036854775807
PositiveSmallIntegerField() 在數據庫中爲smallint類型,默認長度爲5的非負小整數,值的區間在0, 32767
PositiveIntegerField() 在數據庫中爲int類型,默認長度爲10的非負整數,值的區間在0, 2147483647
TextField() 在數據庫中爲longtext類型,長整數類型,通常使用大量文本時纔會使用此類型
UUIDField() 在數據庫中爲char類型,只能存儲UUID格式字符串,(UUID爲一個32位的全球唯一的字符串,一般用來作爲主鍵)
URLField() 在數據庫中爲varchar類型,用於存儲URL格式字符串,默認長度爲200。

Django日期類型詳解

Django中日期爲分時區日期,其中在setting.py中可以設置當前時區,默認爲協調世界時(UTC),在中國我們大多使用TIME_ZONE = Asia/Shanghai這個時區。
如果不想引入時區的概念可以將USE_TZ = True設爲Flast,即可關閉時區
在這裏插入圖片描述
Django建議大家使用from django.utils.timezone import now保存當前時間
存儲日期除了我上述介紹的方式外,還有DateFieldTimeField,他們分別只能存儲日期與時間,使用較少。
日期的field有兩個特殊的屬性,分別是

  • auto_now=True 自動創建—無論添加或修改,都是當前操作的時間
  • auto_now_add=True 自動創建—永遠是創建時的時間

Field屬性中常用參數

常用參數 作用
null 是否允許爲空(默認爲False)
db_column 此字段在數據庫中的名稱(如果不設置此參數,默認名稱爲屬性名)
default 默認值,可以是一個值,也可是一個函數
primary_key 是否爲主鍵,默認爲Falst
unique 在表中此字段值是否唯一(手機號郵箱號等常用)
max_length 指定字段長度

模型中Meta配置

對於一些模型級別的配置。我們可以在模型中定義一個類,叫做Meta(此類必須放置在數據庫模型中,也就是集成了models.Model的類中)。然後在這個類中添加一些類屬性來控制模型的作用。

db_table

我們使用ORM創建的表名默認爲APP名_類名,如果我們不想使用此名稱,可以在Meta類(class Meta)寫入db_table指定名稱

ordering

ordering用於指定讀取數據時,數據的排序方式,比如ordering = ['id']爲id的升序,ordering = ['-id']爲id的降序

class People(models.Model):
    id = models.AutoField(primary_key=True)
    角色 = models.CharField(max_length=20)
    介紹 = models.TextField()
    當前時間 = models.DateTimeField()

    class Meta:
        db_table = '模型創建測試表'
        ordering = ['id']
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章