iT邦幫忙

2022 iThome 鐵人賽

DAY 19
0

前言

來到第19天,我們終於來到Model,離開始建立網站差最後一步了!

什麼是Model

我們在前面有提到,Model是用來處理與應用程式的業務邏輯相關的資料以及對資料的處理方法,並讓我們可以用python和django去操作資料庫。

  • Model在python裡是一個類別(class)且這些類別都對應資料庫的table
  • 每個Model都對應到一個table。
  • 每一種類型的資料都會有自己的Models(如:使用者、相簿、文章的Model等等)。
  • 所有的class都必須繼承 django.db.models.Model。
  • Model 提供了 自動生成的資料庫存取API(automatically-generated database-access API)讓我們可以用簡單的操作大家熟知的CRUD:
    • C:CREATE 創建
    • R:Read 讀取
    • U:Update 更新
    • D:Delete 刪除

簡單來說如果以code來呈現的話:

Code

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

DataBase

https://ithelp.ithome.com.tw/upload/images/20220927/20150927hhNkUkMCsE.png

可以看到Person的Class在Database就是代表著Person的table,這個table有first_name和 last_name的欄位。
看完上面的圖你會發現 咦? 我們宣告只有first name和 last name 怎麼多了一個id !? 這是因為Django會自動在你的Model 加上 id 欄位,這個欄位就是大家熟知的primary key(主鍵)。

創建資料庫

SQL engine

首先我們可以在setting.py中找到DATABASES。

setting.py

...
DATABASES = {
*     'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

可以看到Django已經幫我們設定好引擎和名稱。
SQLite是Django預設的資料庫,除此之外我們也可以透過引擎改變我們要使用的資料庫,包括:

  • MySQL
  • PostgreSQL
  • Oracle
  • SQLite

如果想要轉換成不同的資料庫可以參考官方文件
在我們的開發裡會使用預設的SQLite做為我們的資料庫,之後會在介紹一下SQLite。

再來來到Models.py裡面輸入下面程式碼

Django_app/Models.py

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

上面這些程式碼會幫我們自動生成一個Person的Table。
可以看到我們在新建類別的時候,需繼承models模組中的Model類別,也就是models.Model。
而底下生成的Table:

  • 一個Primary key id
  • 最大長度30的varchar(可變長度字符串),名為first_name。
  • 最大長度30的varchar(可變長度字符串),名為last_nane。

打完上面的python code之後,Python就會幫你轉換成下面的SQL語法,來新建一個Table。

CREATE TABLE Django_app_person (
    "id" bigint NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(30) NOT NULL
);

我們只要使用Python就能做SQL的操作了,是不是很方便呢~
這樣我們就初步了解Django class 是如何對應到 table的囉~

參考資料&推薦閱讀

https://docs.djangoproject.com/en/4.1/topics/db/models/#module-django.db.models
https://medium.com/erens-tech-book/sqlite-%E8%88%87-mysql-%E7%9A%84%E5%B7%AE%E5%88%A5-a14926030ddd
https://docs.djangoproject.com/en/4.1/ref/settings/#databases


上一篇
Day-18- Template -靜態文件的呈現
下一篇
Day-20 - Models - migrations
系列文
從0 到 50 初探 如何使用Django 架構出一個網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言