专栏首页Python工程师网站搭建-django-学习成绩管理-06-数据库操作之ORM-1

网站搭建-django-学习成绩管理-06-数据库操作之ORM-1

系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3.2 Django:2.1.4 Python:3.6.0

  • 本系列介绍如何搭建一个网站,后端使用django框架
  • 今天开始介绍一个单独的项目app,关于学生成绩管理的网站的搭建
  • 主要功能包括: 学习成绩查询,数据统计分析
  • 涉及前端模块: Datatables、ECharts、JQuery

Part 1:目标

  1. 本文的目标跟大家说说对于数据库的ORM操作
  2. 本示例中使用的数据库为MySQL,我们可以通过传统的SQL进行增删改查,但想想写一个多个条件的SQL语句就头大。Django中自带的ORM功能将这一过程简单化, 但缺点是存在部分的性能丢失

Part 2:数据库创建

  1. 传统上我们可以在类似于MySQL Workbench这样的软件中手动创建数据库的表,如下图所示,当然也可以通过SQL代码来创建
  2. 回想一下,我们一般需要输入哪些信息: 表名,每个字段的信息(包括数据类型,是否为主键,是否为非空,是否唯一,是否自增等)
  3. 也就是说本质上,创建数据库单表过程中,其实只要输入这些信息即可,手动在数据库操作软件上实现或者SQL输入这些信息都是可以的
  1. 在之前的文章说过,Django中通过在Models里新建一个Class类,创建一个表。其实在这样的Class类中也涵盖了如上的这些信息,常用关键字如下:
    • 字段类型: CharField(字符串),FloatField(实数,可以保存小数),DateTimeField(日期时间)、DateField(日期)、SmallIntegerField(整数)
    • blank=True, null=True是否允许该字段为空或者null
    • max_length允许的最大字符长度,一般与CharField配合使用
    • default=0.0字段默认值
    • db_table设置数据库中表的名字,这是在数据库操作软件(如Workbench)中能看到的名字,但所有对数据库的操作使用的是该Class的名称,注意区别
    • verbose_name是一个方便理解的名字,在DjangoAdmin中可以看到,一般仅仅只是方便理解,可以使用中文
    • unique_together中多个字段联合保持唯一,例如在下面的StudentGrades类中('class_name', 'student_name', 'exam_info', 'course_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       

Part 3:数据库操作 - 增

  1. 下面所说表类名表示Models对应数据库表的类名,如本示例中的StudentGrades
  2. 表类名.objects.create(**new_dict_data)创建一条新的记录,其中new_dict_data为一个字典,字典的键为字典的名字,值为对应字段的取值。也就是说new_dict_data的写法一般如下

    new_dict_data["field_1"] = value_1new_dict_data["field_2"] = value_2new_dict_data["field_3"] = value_3new_dict_data["field_4"] = value_4new_dict_data["field_5"] = value_5new_dict_data["field_6"] = value_6

  3. **new_dict_data是一种缩略写法,是Python中一种关键参数的表示方法**kwargs,如下示例

**kwargs

执行结果

Part 4:数据库操作 - 删

  1. 表类名.objects.filter(filter_condition).delete(),其中filter_condition表示拟删除记录的条件,例如student_name="张三",即字段student_name中为张三的所有记录
    • filter_condition这块还可以实现一些非常复杂的条件,这涉及到另外一个知识点,这个在后文中会说一些

本文分享自微信公众号 - Python工程师(DatenSpiel),作者:壹章VBA

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 网站搭建-django-学习成绩管理-02-数据库创建

    系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3....

    zishendianxia
  • 网站搭建-django-学习成绩管理-10-查询成绩之后端实现

    系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3....

    zishendianxia
  • 网站搭建-django-学习成绩管理-05-成绩查询之检索条件

    系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3....

    zishendianxia
  • django 前端模板继承显示model中使用choices的字段

    玩蛇的胖纸
  • Springmvc响应Ajax请求(@ResponseBody)

    爱撒谎的男孩
  • Clean Code之JavaScript代码示例

    作为一个开发者,如果你关心代码质量,除了需要认真测试代码能否正确执行以外,还要注重代码的整洁(clean code)。一个专业的开发者会从将来自己或则他人方便维...

    Fundebug
  • 万恶之源 - Python基础数据类型一

    在32位机器上int的范围是:  -2**31~2**31-1,即-2147483648~2147483647

    py3study
  • JavaScript 的简洁之道

    如果你关注代码本身和代码的编写方式,而不是只关心它是否能工作,那么你写代码是有一定的水准。专业开发人员将为未来的自己和“其他人”编写代码,而不仅仅只编写当前能工...

    coder_koala
  • JavaScript 的简洁之道

    如果你关注代码本身和代码的编写方式,而不是只关心它是否能工作,那么你写代码是有一定的水准。专业开发人员将为未来的自己和“其他人”编写代码,而不仅仅只编写当前能工...

    前端小智@大迁世界
  • JSP里的表单处理

    用form标签定义了一个表单,里面有两个input字段,用于输入first name和last name. 表单action属性为main.jsp, 点击类型为...

    Jerry Wang

扫码关注云+社区

领取腾讯云代金券