模型层是与数据库交互信息的,我们先搞个mysql 附录一 windows上安装mysql_potato123232的博客-CSDN博客

安装之后,我们在环境中中安装 mysqlclient

目录

1 创建数据库

2  ORM框架

3  创建数据

4  数据库迁移

4.1  生成中间文件

4.2  迁移到数据库

5  修改数据库

5.1  加入类属性

5.2  生成中间文件

5.3  数据库迁移

5.4  查看数据库内容

5.5  中间文件问题

6  Meta类

6.1  db_table 数据库中表名称

6.2  verbose_name与verbose_name_plural admin后台显示表名称

7 额外注意的点

7.1 更新字段


1 创建数据库

首先我们在这里打开mysql的终端

打开后,输入密码会变成这样

输入 create database mysite1 default charset utf8;

  • 其中mysite1是数据集名称,我们数据集名称一般与项目名称保持一致
  • default charset utf8 方便我们后续使用中文

创建完毕后我们回到pycharm,修改setting.py中的这里

把它改成上面那个样子就行了

  • ENGINE 存储引擎,django还支持别的数据库,比如oracle,不同的数据库在setting.py中的配置不同,但ORM语句相同
  • NAME 数据库名称
  • USER 用户名,我们使用root就好,使用别的用户也行
  • PASSWORD 密码,如果我们用的是root用户,我们在mysql终端输入的密码写在这里就好
  • HOST mysql地址,我们在这里使用本地mysql,一般也是使用本地的
  • PORT mysql端口,mysql默认端口为3306,我们本地只有一个数据库,所以我们就写3306

2  ORM框架

ORM(Object Relational Mapping)是对象关系映射,它允许你使用类和对象对数据库进行操作,从而避免通过SQL语句操作数据库

也就是说有了ORM,我们就可以在代码中操作数据库了(且无论是什么数据库,在ORM中操作方式都是一样的),django中提供了一套ORM

比起直接使用mysql的缺点是速度会慢

这个是ORM与数据库的映射关系

在这里简单说一下mysql的结构,mysql中可以有若干个数据库

数据库中可以有若干个数据表

数据表由行与列构成,我们将列称为字段,行就是一条一条的内容,我们下面就用execl举例

ID,姓名,年龄,籍贯这些就叫字段,也就是列。每一条数据就是行

3  创建数据

我们下面简单体验一下,我们之前创建过一个应用login,在创建应用login后,在login目录下会自动出现models.py这个文件,我们就在这里写模型层

  • 在django中只能在应用中创建数据表

  • 创建应用时会自动生成,但创建项目时不会

然后我们这样写

  • 这里如果你想创建多个数据表,那么就多搞两个类,一个类对应一个数据表
  • 搞多少个类都应该继承models.Model这个父类

我在这里写了CharFielf(字符串类型数据)与DecimalField(数字类型数据),当然还有别的类型,我们后期如果提到会再说,每一个不同的类型的数据都有其要接的必要参数,我们这里说一下上面提到的参数

  • 用户名/余额 这个是字段的名字,到后面使用admin的时候可以看到
  • max_length 最大长度
  • default 默认值
  • max_digits 最大位数,我们现在设置的7,就是数据中最多有7个数
  • decimal_places 小数位数,我当前给的2,就是保留两位小数

至此我们的数据就创建完毕了,但是现在在mysql中并不能看到它

我们还需要把写的东西迁移到mysql上,我们称这个过程为数据库迁移

4  数据库迁移

4.1  生成中间文件

我们首先输入 python manage.py makemigrations,生成一个中间文件

  • 在这一步如果发现在setting.py的注册应用中多写了你没注册的应用会提示你,no module name [应用名],这个时候去检查一下setting,py中的INSTALLED_APPS
  • 有些数据有必要的属性要加,比如数字类型数据的max_digits就是必要的,如果没写的话,输入命令后终端会告诉你

python manage.py makemigrations正常运行之后,在应用文件夹下的migrations会产生0001_initial.py这个文件

打开之后是这样的

  • 发现这里给加了一个id,这个是自带的

有些字段我们如果没给默认值的话,就会出现下面这种情况

我们可以在Select an option 后面输入1,然后回车,这样你可以给这个字段一个默认值。在这里输入完默认值,只在中间文件中会体现你输入的默认值,但是在代码(models.py)中是没有体现的,所以这样做并不是很好

我们一般会选择2,然后回到models.py中加上默认值,这样从中间文件与代码中,都可以看到默认值

4.2  迁移到数据库

之后我们输入 python manage.py migrate,将中间文件同步到数据库中

这个时候我们再会mysql中看一下

发现里面已经有数据了,其中login_login_content中放着我们刚刚写的内容,其余都是django自带的内容,后面如果要用的话会再提

  • 第一个login是我们的应用名,后面的login_content是我们数据库的类名

我们输入 desc login_login_content 看一下表结构

发现确实是我们输入的内容,我们之前没有设置主键,所以django给我们设置了一个主键(PRI Key)id

5  修改数据库

5.1  加入类属性

我们依然通过ORM对数据库进行修改,我们现在想加入password这个字段,那么我们应该这样做

首先在应用下的models.py中加上password这个类属性

5.2  生成中间文件

之后生成中间文件 python manage.py makemigrations

发现在migrations中又多出来一个文件

这里不能把之前的0001_initial.py删掉,再生成中间文件。如果你把0001_initial.py删了,然后再生成中间文件,它就会再产生一个0001_initial.py,这样再后面数据库迁移中会有问题

5.3  数据库迁移

之后同步数据库 python manage.py migrate

5.4  查看数据库内容

我们到mysql中看一下

发现添加成功了

5.5  中间文件问题

在这里我们注意,数据迁移最后的提示是 Applying login.0002_login_content_password... OK

这里只使用了0002这个文件,而没有使用0001这个文件

在django中数据库的每一次迁移只迁移新增的文件,具体之前迁移过哪一个文件,在mysql中的django_migrations中会有记录

我们在这里就可以看到,我的迁移次数,与我每一次都迁移了什么,还有我每一次迁移的时间

上面截图并不是全部内容,我们是对app login进行操作的,所以我们应该关注app:login的内容

我们发现也是有迁移过程的详细记录的,这也就是说明在生成中间文件时不能删除前面文件的原因

我们现在假定我们中间文件缺失了(工作中有可能会遇到这种情况),现在只有models.py,然后我生成一个迁移文件

发现它只生成了0001_initial.py,然后我们再进行迁移

它会提示你,没有要迁移的东西,这样你就没法改了,这个时候就只能直接删除数据库了(在sql中输入drop database mysite1;)

如果出现数据库与ORM对不上的情况也可以把数据库删了,以ORM为主

6  Meta类

我们除了可以对数据库中的字段进行操作,也可以对数据表进行操作,我们可以在数据表类中,定义一个Meta类,从而定义模型类的一些属性

6.1  db_table 数据库中表名称

我们可以使用Meta类改变数据表的名称

我们生成中间文件并迁移数据库后,在mysql中就可以看到我们刚刚重命名的表了

6.2  verbose_name与verbose_name_plural admin后台显示表名称

在admin后台中注册后默认是这样的,它会以类名加个s显示

如果设置了verbose_name(模型类单数名称)与verbose_name_plural(模型类复数名称)就是这样的

由于我们里面有多条信息,所以它是复数形式,如果只有一条信息就是单数形式

如果不设置verbose_name_plural,只设置verbose_name,就是这样的

也可以让它单复数保持一致,这样无论单复数都会显示相同的字符串

7 额外注意的点

7.1 更新字段

我有一个字段之前叫publish

现在我想将其改为publisher,我们直接修改就可以了(包括后面的字段类型,字段选项都是可以后续进行改动的)

之后生成迁移文件,在生成迁移文件的时候会提示是否重命名,我们输入y,然后输入回车

迁移数据库前,数据库的内容是这样的

现在我们进行迁移

迁移后发现名称已经成功修改了

10.模型层与ORM相关推荐

  1. Django之模型层和ORM

    在之前的文章中已经介绍过数据库的操作使用,但是不够系统,今天就模型层和ORM做一个系统的介绍.所谓模型层就是主要负责和数据库之间进行数据交互的一个模块 Django连接mysql数据库,安装mysql ...

  2. 【Django】模型层说明

    [Django模型层] 之前大概介绍Django的文章居然写了两篇..这篇是重点关注了Django的模型层来进行学习. ■ 模型定义 众所周知,Django中的模型定义就是定义一个类,其基本结构是这样 ...

  3. django之七(模型层ORM相关)

    ORM字段 常见字段 1.CharField(max_length,verbose_name=)) 2.AutoField(primary_key)BigAutoField(AutoField)- b ...

  4. Django–模型层orm查询

    文章目录 Django–模型层orm查询 一.单表查询(增.删.改.查) 基本查询 下划线查询 二.外键字段(增.删.改.查) 一对多 多对多 三.多表查询 多表查询的方式 正反向的概念 基于对象的跨 ...

  5. Web开发-Django模型层

    Django模型层 简述 Django框架处理业务的逻辑一般如下(省略图,源于网络,侵删) 可以看到,Django自带了一套ORM机制,这也是Django框架的核心-"全面",将一 ...

  6. DJango周总结二:模型层,单表,多表操作,连表操作,数据库操作,事务

    django周复习二  1,模型层:   1单表操作:    13个必会操作总结     返回QuerySet对象的方法有     all()     filter()     exclude()   ...

  7. Django模板自定义标签和过滤器,模板继承(extend),Django的模型层

    上回精彩回顾 视图函数:request对象request.path 请求路径request.GET GET请求数据 QueryDict {}request.POST POST请求数据 QueryDic ...

  8. Django学习日志三:模型层

    Django学习日志三:模型层1 日志一我们学习了Django的配置,详见: Django学习日志一Django的配置 日志二我们学习了创建第一个django项目,详见: Django学习日志二--创 ...

  9. Django框架——模型层单表操作、模型层多表操作、模型层常用和非常用字段和参数、模型层进阶

    文章目录 1 模型层-单表操作 一 ORM简介 二 单表操作 2.1 创建表 1 创建模型 2 更多字段 3 更多参数 4 settings配置 5 增加,删除字段 2.2 添加表纪录 2.3 查询表 ...

最新文章

  1. 通过游戏来学习CSS的Flex布局
  2. mysql在电脑哪里启动项_所有电脑和主板开机选择启动项的快捷键
  3. android 获取网卡mac_在Android机顶盒上 怎么样获取有线网卡MAC地址?
  4. linux下sudo权限管理
  5. JQuery源码解析-整体架构的设计
  6. 这样学习正则表达式就轻松了!
  7. java 扩展数据类型_005Java学习--数据类型及拓展
  8. editorloop 占用_速度控制 部分重复 语言学习软件 Loopman
  9. 为什么我要选择erlang+go进行server架构(2)
  10. 路由cpu负载过高检查
  11. [转]Objective-C 语言特性
  12. leveldb - sstable格式
  13. Windows下安装并启动mongodb
  14. arcgis server10.2.2发布地图基础服务的具体步骤
  15. [ZJOI2012]小蓝的好友
  16. qca9377linux无线驱动,ubuntu下安装无线网卡去驱动Qualcomm-Atheros-QCA9377
  17. 单片机原理及应用(c语言编程),单片机原理及应用——C语言程序设计与实现
  18. Altium Designer中的长度单位如何转换?
  19. gentoo——桌面,openbox,silm,Conky,输入法,layman,QQ安装,WPS
  20. SAP中发票校验凭证与取消发票校验凭证的对应关系查询

热门文章

  1. 用cygwin下载安装ncview(windows 下安装ncview)
  2. 如何理解概率分布函数和概率密度函数?
  3. 3D相机技术调研(飞行时间TOF+双目+结构光)
  4. 算法导论 — 思考题15-4 整齐打印
  5. 三种缓存策略分析:Cache aside,Read/Write through,Write Back
  6. -3243:不能同时包含聚集KEY和大字段
  7. ConstraintLayout跟随吸附效果
  8. java repeatable_java8 新增的@Repeatable注解
  9. 今季新款太阳眼镜完全推荐
  10. Geek爱旅行 - 午安