小白学Django第三天| 一文带你快速理解模型Model

简介: 小白学Django第三天| 一文带你快速理解模型Model

本文内容:


   1. ORM

   2. 模型类的设计和表的生成

   3. 通过模型类操作数据表

   4. 模型类关系和关系查询



1. ORM


在如今很多的框架中,ORM已经应用的非常的广泛,什么是ORM呢?


ORM 全拼Object-Relation Mapping.


中文意思:对象-关系 映射


在我们所学的Django中的MVC或MVT中的M就采用了ORM。


它的作用是实现模型对象到关系型数据库数据的映射



比如把数据库中每条记录映射为一个模型对象:

微信图片_20220217104130.jpg


图解ORM


微信图片_20220217104135.jpg


很明显采用ORM模型,有着很多的优点它把面向数据库的编写代码转换成面向对象的编写,而且各种数据操作都转化成类中方法和属性的方法。除此之外,我们不用去写复杂的SQL语句。


当然除了上面的优点,这种面向对象的写法也让我们忽略了数据库的类型,无论是MYSQL、oracle都可以使用相同的方式,并且我们只需要修改配置文件即可切换数据库类型,不需要改动其他代码。


当然,缺点也有通过这种面向对象的编程难免会比直接SQL语句的性能差一些,这个性能的差值主要是在映射的过程中丧失的。


 2. 模型类的设计和表的生成


了解了ORM的含义,我们来体验一下Django框架中是如何具体运用的:


首先编写一个模型类


微信图片_20220217104139.jpg


这里我们有book_title和book_date两个属性。


大家可能会对models的一些方法有疑惑,这里给大家总结了


模型类定义属性:

# 书籍信息模型
class BookInfo(models.Model):
    name = models.CharField(max_length=20) #图书名称
  • 总结语法 : 属性名 = models.字段类型(选项)
  • 定义属性时需要指定字段类型, 通过字段类型的参数指定选项

属性名相关注意事项:

  • 不允许使用python的保留关键字
  • 不允许使用mysql的保留关键字
  • 不允许使用连续的下划线,因为Django的查询语法就是连续的下划线

字段类型

提示:Django根据属性的类型确定以下信息:

  • 当前选择的数据库支持字段的类型
  • 渲染管理表单时使用的默认html控件
  • 在管理站点最低限度的验证
  • 使用时需要引入from django.db import models包

  • AutoField:自动增长的IntegerField,通常不用指定
  • 不指定时Django会自动创建属性名为id的自动增长属性
  • BooleanField:布尔字段,值为True或False
  • NullBooleanField:支持Null、True、False三种值
  • CharField(max_length=字符长度):字符串
  • 参数max_length表示最大字符个数
  • TextField:大文本字段,一般超过4000个字符时使用
  • IntegerField:整数
  • DecimalField(max_digits=None, decimal_places=None):可以指定精度的十进制浮点数
  • 参数max_digits表示总位数
  • 参数decimal_places表示小数位数
  • FloatField:浮点数
  • DateField[auto_now=False, auto_now_add=False]):日期
  • 参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false
  • 参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false
  • 参数auto_now_add和auto_now是相互排斥的,组合将会发生错误
  • TimeField:时间,参数同DateField
  • DateTimeField:日期时间,参数同DateField
  • FileField:上传文件字段
  • ImageField:继承于FileField,对上传的内容进行校验,确保是有效的图片



编写完我们的模型类之后,我们需要生成迁移文件:


python manage.py makemigrations

微信图片_20220217104150.jpg


执行完后,我们会发现migration文件夹中多出了几个文件:


微信图片_20220217104153.jpg


并且在图中我标记的文件里有着迁移过后所产生我们刚写的模型类所对应的迁移类。


生成了迁移文件之后,我们还需要执行迁移文件,这样才会和我们的数据库映射起来(Django默认配置sqlite数据库,所以我们暂时使用sqlite,之后我们会配置成mysql)


执行迁移文件生成表:


python manage.py migrate


微信图片_20220217104158.jpg


执行完成后,我们会发现我们的项目目录下产生了一个db.sqlite3的文件,这个文件就是sqlite数据库文件,我们通过命令行把这个文件打开


微信图片_20220217104202.jpg

通过查看表的列属性


微信图片_20220217104206.jpg


可以发现成功创建了我们模型类相对应的表。



3.通过模型类操作数据表


我们上面模型类和数据表都创建完了,接下来我们该怎么去添加、修改表中的数据呢?


早在最前面就跟大家说了ORM,也就是说我们可以直接通过对象来对数据库中的数据进行操作。


我们这里进入项目的shell命令中来给大家讲解操作数据库

微信图片_20220217104210.jpg

执行完毕以后,我们去查看我们的sqlite数据库

微信图片_20220217104214.jpg


可以看到我们通过对象储存的数据已经保存至数据库了。


(有关于操作数据库,知识点比较多,我会专门写一篇文章来详细说明)


 4.模型类关系和关系查询

微信图片_20220217104218.jpg

大家可以看到上图,我们在之前的模型类BookInfo基础上,加了一个People模型类,因为在一本书中可能会出现很多人物。由此我们会有一个一对多的关系,这种关系是怎么建立的,大家可以看到最后一句代码 ForeignKey()


我们编写好两个模型类后,同样的步骤给People生成迁移文件,执行迁移文件创建表。


为了给大家演示,我们再次进入shell当中操作:


微信图片_20220217104222.jpg


执行完后,我们来看看两个表之间的数据


微信图片_20220217104227.jpg微信图片_20220217104230.jpg


可以看到,这两张表已经连接起来了


既然已经连接起来,我们自然是可以互相访问数据了


通过人物查找书籍:

微信图片_20220217104234.jpg


查找书籍中的所有人物:

微信图片_20220217104237.jpg

相关文章
|
2月前
|
存储 安全 网络协议
Python 教程之 Django(9)对模型中的字段进行验证
Python 教程之 Django(9)对模型中的字段进行验证
41 0
Python 教程之 Django(9)对模型中的字段进行验证
|
2月前
|
SQL 数据库 索引
Django MTV - 模型层 - (专题)知识要点与实战案例
Django MTV - 模型层 - (专题)知识要点与实战案例
43 0
|
26天前
|
关系型数据库 MySQL 数据库
数据迁移脚本优化过程:从 MySQL 到 Django 模型表
在大规模的数据迁移过程中,性能问题往往是开发者面临的主要挑战之一。本文将分析一个数据迁移脚本的优化过程,展示如何从 MySQL 数据库迁移数据到 Django 模型表,并探讨优化前后的性能差异。
|
27天前
|
JSON API 数据格式
Django REST framework序列化器详解:普通序列化器与模型序列化器的选择与运用
Django REST framework序列化器详解:普通序列化器与模型序列化器的选择与运用
|
25天前
|
关系型数据库 MySQL 数据库
『Django』模型入门教程-操作MySQL
一个后台如果没有数据库可以说废了一半。日常开发中大多数时候都在与数据库打交道。Django 为我们提供了一种更简单的操作数据库的方式。 在 Django 中,模型(Model)是用来定义数据库结构的类。每个模型类通常对应数据库中的一个表,类的属性对应表中的列。通过定义模型,Django 的 ORM(Object-Relational Mapping)可以将 Python 对象映射到数据库表,并提供一套 API 来进行数据库操作。 本文介绍模型的用法。
|
1月前
|
关系型数据库 MySQL 数据库连接
数据迁移到 Django 模型表:详尽指南
数据迁移是许多应用程序开发过程中必不可少的一部分。在这篇文章中,我们将详细分析和总结如何通过一个定制的 Django 管理命令,将数据从 MySQL 数据库迁移到 Django 模型表中。这种方法可以确保数据在多个数据库之间有效且安全地迁移,同时避免了手动操作的繁琐和错误。
|
1月前
|
数据采集 存储 数据库
优化 Django 模型设计:解决重复爬虫任务和商品数据
在开发数据采集(爬虫)应用时,我们常常面临这样一个问题:不同用户提交了相同的采集任务。为了避免在数据库中存储重复的 URL 和商品数据,我们需要优化模型设计。本文将介绍如何设计 Django 模型,以解决这个问题,并确保数据的一致性和完整性。
|
27天前
|
存储 SQL 数据处理
Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解
Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解
|
27天前
|
数据库 开发者 Python
Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作
Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作
|
2月前
|
Python
使用Django时,如何设计模型关系(一对一、一对多、多对多)?
Django支持三种模型关联:ForeignKey(一对多),OneToOneField(一对一)和ManyToManyField(多对多)。ForeignKey示例:`Article`有一个指向`Author`的外键。OneToOneField示例:`UserProfile`与`User`一对一关联。ManyToManyField示例:`Student`和`Course`之间多对多关系。这些关联字段便于反向查询,如`article.author`获取作者,`author.article_set.all()`获取作者所有文章。
30 1