Django學習之路-3使用模型
阿新 • • 發佈:2018-12-20
模型理解
模型抽象了資料的構成、訪問和資料之間的邏輯關係,資料庫是一個獨立於python的東西,Django使用一些類來和資料庫打交道,那麼這些類就是model的本質,那麼這些類就會定義資料庫的資料、對資料的訪問和操作。所以model是Django和資料庫的轉介面。
-
ORM:ObjectRelationMap,model負責構建資料庫表和互動
-
應用的model類對應表,類中的屬性對應表字段 - 所有class都是models.Model的子類 - 所有屬性型別都是model.xxx,不能使用其他資料型別
-
Django自帶資料庫sqllite3(關係型、輕量級),不需要任何配置
-
某大神建議:開發時候使用sqlite3,部署的時候使用mysql或oracle等 - 配置其他資料庫修改settings.py即可,如mysql
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '資料庫名稱', 'PASSWORD':'資料庫密碼', 'HOST':'127.0.0.1', 'PORT':'3306', } }
import pymysql
pymysql.install_as_MySQLdb()
-
系統在預設開啟的某些應用需要至少一個數據表,比如,儲存類似cookie、session等,所以,在使用他們之前需要在資料庫中建立一些表。請執行以下命令:
$ python manage.py migrate
settings.py是一個配置檔案,大概如下:
- INSTALLED_APPS 預設包括了以下 Django 的自帶應用: - django.contrib.admin – 管理員站點, 你很快就會使用它。 - django.contrib.auth – 認證授權系統。 - django.contrib.contenttypes – 內容型別框架。 - django.contrib.sessions – 會話框架。 - django.contrib.messages – 訊息框架。 - django.contrib.staticfiles – 管理靜態檔案的框架。 -
- (後面的等學習get後,在更新吧…)
使用model
- 必須使用model類
from django.db import models
- 應用的model.py的類對應表,類中的屬性對應表字段 - 所有class都是models.Model的子類 - 每個欄位都是 Field 類的例項 - 所有屬性型別都是model.xxx,不能使用其他資料型別
- 欄位常用引數 - max_length:規定數值最大長度 - blank:欄位是否可以為空,預設False - null:欄位是否可以儲存為null,預設False - default:預設值 - unique:是否唯一 - verbose_name:假名
建立model
- 在這個簡單的投票應用中,需要建立兩個模型:問題 Question 和選項 Choice。Question 模型包括問題描述和釋出時間。Choice 模型有兩個欄位,選項描述和當前得票數。每個選項屬於一個問題。
- 編寫polls/models.py
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
- 每個模型被表示為 django.db.models.Model 類的子類
- 每個變數都是 Field 類的例項,都表示為資料庫的欄位
- 使用 ForeignKey 定義了一個關係,每個 Choice 物件都關聯到一個 Question 物件
資料庫生成
- 啟用模型 為了在我們的工程中包含這個應用,我們需要在配置類 INSTALLED_APPS 中新增設定。因為 PollsConfig 類寫在檔案 polls/apps.py 中,所以它的點式路徑是 ‘polls.apps.PollsConfig’。在檔案 mysite/settings.py 中 INSTALLED_APPS 子項新增點式路徑
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
- 模型遷移 通過執行 makemigrations 命令,Django 會檢測你對模型檔案的修改(在這種情況下,你已經取得了新的),並且把修改的部分儲存為一次 遷移。
$ python manage.py makemigrations 應用名
- 閱讀遷移 遷移是 Django 對於模型定義(也就是你的資料庫結構)的變化的儲存形式,它們其實也只是一些你磁碟上的檔案,它被儲存在polls/migrations/0001_initial.py 裡,或者你可以執行下面命令,檢視遷移好的sql語句
python manage.py sqlmigrate polls 0001
- 建立資料表 這個 migrate 命令選中所有還沒有執行過的遷移(Django 通過在資料庫中建立一個特殊的表 django_migrations 來跟蹤執行過哪些遷移)並應用在資料庫上 - 也就是將你對模型的更改同步到資料庫結構上
$ python manage.py migrate
- 所以總結一下 - 編輯 models.py 檔案,改變模型。 - 執行 python manage.py makemigrations 為模型的改變生成遷移檔案。 - 執行 python manage.py migrate 來應用資料庫遷移。
shell除錯資料庫
$ python manage.py shell