小白学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

相关文章
|
9月前
|
机器学习/深度学习 前端开发 网络架构
Django如何调用机器学习模型进行预测
Django如何调用机器学习模型进行预测
201 5
|
9月前
|
机器学习/深度学习 监控 数据挖掘
基于Django和百度飞桨模型的情感识别Web系统
基于Django和百度飞桨模型的情感识别Web系统
154 5
|
9月前
|
机器学习/深度学习 算法 搜索推荐
django调用矩阵分解推荐算法模型做推荐系统
django调用矩阵分解推荐算法模型做推荐系统
141 4
|
9月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
310 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
9月前
|
存储 开发框架 JSON
【查漏补缺】Django模型字段类型及其应用
【查漏补缺】Django模型字段类型及其应用
84 0
|
11月前
|
机器学习/深度学习 前端开发 数据挖掘
基于Python Django的房价数据分析平台,包括大屏和后台数据管理,有线性、向量机、梯度提升树、bp神经网络等模型
本文介绍了一个基于Python Django框架开发的房价数据分析平台,该平台集成了多种机器学习模型,包括线性回归、SVM、GBDT和BP神经网络,用于房价预测和市场分析,同时提供了前端大屏展示和后台数据管理功能。
269 9
|
11月前
|
存储 数据库 开发者
Django Web架构:全面掌握Django模型字段(下)
Django Web架构:全面掌握Django模型字段(下)
132 2
|
11月前
|
API 数据库 开发者
【独家揭秘】Django ORM高手秘籍:如何玩转数据模型与数据库交互的艺术?
【8月更文挑战第31天】本文通过具体示例详细介绍了Django ORM的使用方法,包括数据模型设计与数据库操作的最佳实践。从创建应用和定义模型开始,逐步演示了查询、创建、更新和删除数据的全过程,并展示了关联查询与过滤的技巧,帮助开发者更高效地利用Django ORM构建和维护Web应用。通过这些基础概念和实践技巧,读者可以更好地掌握Django ORM,提升开发效率。
138 0
|
11月前
|
SQL Shell API
python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
|
11月前
|
SQL 关系型数据库 MySQL
如何创建 Django 模型
如何创建 Django 模型
84 0