网站搭建-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

以上为本次的学习内容,下回见