網站搭建-django-學習成績管理-02-數據庫創建
- 2020 年 2 月 13 日
- 筆記
系統:Windows 7 語言版本:Anaconda3-4.3.0.1-Windows-x86_64 編輯器:pycharm-community-2016.3.2
- 本系列介紹如何搭建一個網站,後端使用django框架
- 今天開始介紹一個單獨的項目app,關於學生成績管理網站的搭建
- 主要功能包括:學習成績查詢,數據統計分析
- 涉及前端模塊:Datatables、ECharts
- 今天講講數據庫的創建
Part 1:功能描述
- 整個項目包括兩個網頁:
- 第1個網頁:包含一張表格,可以查看所有學生不同次模擬考的不同科目的學習成績
- 第2個網頁:單個人成績折線圖查詢;單個學生不同科目成績分佈盒形圖;成績排名柱狀圖
- 目前想到這麼多,後續再看看
Part 2:數據庫設計
- 有兩張表格:一張表格放置一些常數項,如班級、姓名、模擬考代號、科目
- 另一張表格,存放每名學生的成績,字段有:班級、姓名、模擬考信息、科目、成績
- 以上數據庫假設:同一個班級沒有相同姓名的學生
Part 3:models
from django.db import models class Constants(models.Model): class_name = models.CharField(blank=True, null=True, max_length=10, verbose_name='班級') student_name = models.CharField(blank=True, null=True, max_length=10, verbose_name='學生姓名') exam_info = models.CharField(blank=True, null=True, max_length=20, verbose_name='模擬考信息') course_name = models.CharField(blank=True, null=True, max_length=20, verbose_name='科目') class Meta: db_table = 'grades_constants' verbose_name = "常數項" verbose_name_plural = verbose_name class StudentGrades(models.Model): class_name = models.CharField(blank=True, null=True, max_length=10, verbose_name='班級') student_name = models.CharField(null=False, default='', max_length=10, verbose_name='學生姓名') exam_info = models.CharField(blank=True, null=True, max_length=20, verbose_name='模擬考信息') course_name = models.CharField(blank=True, null=True, max_length=20, verbose_name='科目') grades = models.FloatField(blank=False, null=False, default=0.0, verbose_name="學習成績") class Meta: unique_together = ('class_name', 'student_name', 'exam_info', 'course_name') db_table = 'grades_record' verbose_name = "學習成績記錄" verbose_name_plural = verbose_name
代碼截圖

models.py:寫創建數據庫對應代碼的位置

Part 4:ORM介紹
- 在以往的工作中,我們可能是通過數據庫操作軟件進行工作表的創建,或者通過SQL語句創建
- 在Django項目中我們通過在models創建類,然後再通過migrate創建對應的數據庫
- python manage.py makemigrations
- python manage.py migrate
- 之所以這麼做,是因為Django採用的
Object-relational mapper
的方法,將傳統對數據庫操作的sql語句改為對類的操作 - 簡單來理解:一個類就是一張表,通過CharField,FloatField等類創建對應的字段,不同的數據類型有不同的類與其對應
- Meta類
- 定義了表名
db_table
- 創建了聯合約束
unique_together('class_name', 'student_name', 'exam_info', 'course_name')
,不同記錄不能有完全相同的以上4個字段
- 定義了表名
makemigrations

migrate

以上為本次的學習內容,下回見