來到第19天,我們終於來到Model,離開始建立網站差最後一步了!
我們在前面有提到,Model是用來處理與應用程式的業務邏輯相關的資料以及對資料的處理方法,並讓我們可以用python和django去操作資料庫。
簡單來說如果以code來呈現的話:
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
可以看到Person的Class在Database就是代表著Person的table,這個table有first_name和 last_name的欄位。
看完上面的圖你會發現 咦? 我們宣告只有first name和 last name 怎麼多了一個id !? 這是因為Django會自動在你的Model 加上 id 欄位,這個欄位就是大家熟知的primary key(主鍵)。
首先我們可以在setting.py中找到DATABASES。
...
DATABASES = {
* 'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
可以看到Django已經幫我們設定好引擎和名稱。
SQLite是Django預設的資料庫,除此之外我們也可以透過引擎改變我們要使用的資料庫,包括:
如果想要轉換成不同的資料庫可以參考官方文件
在我們的開發裡會使用預設的SQLite做為我們的資料庫,之後會在介紹一下SQLite。
再來來到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:
打完上面的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