七.django模型系统(一)
Ⅰ.django的ORM
1.含义
对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的--“虚拟对象数据库”。ORM有时也称为基于事实的建模,因为它把相关数据描述为基本事实。这些事实如果分割为再小的事实就会丢失信息。
对象关系映射(Object-Relational Mapping)提供了概念性的、易于理解的模型化数据的方法。ORM方法论基于三个核心原则: 简单:以最基本的形式建模数据。 传达性:数据库结构被任何人都能理解的语言文档化。 精确性:基于数据模型创建正确标准化的结构。 典型地,建模者通过收集来自那些熟悉应用程序但不熟练的数据建模者的人的信息开发信息模型。建模者必须能够用非技术企业专家可以理解的术语在概念层次上与数据结构进行通讯。建模者也必须能以简单的单元分析信息,对样本数据进行处理。ORM专门被设计为改进这种联系。
总而言之,ORM就是指:用python的概念来表达数据库。即可以用python中的数据类型来表示mysql中的一张表。也就是说,我对python的数据进行操作,它就可以将其映射到mysql的数据库中,而我不需要写sql语句。

Ⅱ.数据库配置
1.数据库配置步骤
安装pymysql
修改项目目录下的
__init__.py,改为如下样式:
import pymysql
pymysql.install_as_MySQLdb()
手动创建一个当前项目的空的数据库,准备一个有创建数据库权限的用户
settings 配置,改为如下样式:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'crm', #数据库名
'USER': 'admin',
'PASSWORD': 'Root110qwe',
'HOST': '127.0.0.1',
'PORT': '',
}
2.实际操作



3.补充:两种数据库的创建方法
1)Navicat(物理机)的创建/连接

2)在pycharm的虚拟机中进行数据库的创建

Ⅲ.模型的创建与映射
1.模型
1)模型含义
这里的模型就 django.db.models.Model的一个子类。
模型定义在app文件夹下的models.py文件
2)创建模型

2.激活模型(模型映射)
1)执行步骤
**注册应用
创建迁移(django数据库中一旦有任何的数据库结构的改变都要进行一次创建迁移)
python manage.py makemigrations appname #注:如果不写 appname 则代表迁移所有已注册的app
如果想看:我们的更改,会对数据库产生什么影响,我们可以看它大概会执行什么sql语句。具体操作如下:
python manage.py sqlmigrate appname num
例如: python manage.py sqlmigrate teacher 0001
- 执行迁移 操作数据库,将对模型的改动应用到数据库(底层就是执行了sql),具体输入如下:
python manage.py migrate appname #当不写 appname 则会将所有注册的改动映射到输出
模型映射到数据库中是一张表, 表名 = appname_模型name (小写)
执行上面的命令到底干了些什么:
1.在app中查找迁移文件,并且去django_migrations表中查找,如果有没有执行的迁移文件,就执行它
2.执行了迁移生存的sql语句
3.如果成功,会在django_migrations表中增加一条记录
2)实例操作

当发生修改时,继续如下操作:

Ⅳ.简单的数据的增删改查
1.django 调试环境
python manage.py shell


2.增
1)一般代码输入情况
#第一种方式:
In [3]: s=Student()
In [5]: s.name = 'Michael_Lxh'
In [6]: s.age = 18
In [7]: Student.objects.all()
Out[7]: <QuerySet []> In [8]: s.save() # save 之后才会写到数据库 #第二种方式:
In [10]: stu = Student.objects.create(name='隔壁老王', age=20) #直接创建
2)实例操作
a.第一种方式

b.第二种方式

3.删
1)一般代码输入情况
#删某一条:
In [13]: stu.delete()
Out[13]: (1, {'teacher.Student': 1}) #删所有:
In [8]: Student.objects.all().delete() #注意:一般情况下千万不要使用(慎重) #删特定一条:
In [8]: Student.objects.filter(sex=1).delete() Out[8]: (1, {'teacher.Student': 1})
2)实例操作
a.删除特定的

4.改
1)一般代码输入情况
#改一条的情况:
In [17]: s.age=16
In [18]: s.save() #改全部条:
In [6]: Student.objects.all().update(sex=0)
Out[6]: 2 #改部分有选择的:
In [7]: Student.objects.filter(age__gt=17).update(sex=1)
Out[7]: 1
2)实例操作
a.改一条的情况

b.改全部

c.有选择的修改

5.查
1)一般代码输入情况
#查所有:
In [2]: Student.objects.all()
Out[2]: <QuerySet [<Student: Michael_Lxh>, <Student: 隔壁老王>]> #查一条:
In [3]: Student.objects.get(pk=1) #如果get返回了多值就会报错,因为get返回的是对象
Out[3]: <Student: Michael_Lxh> #带条件的查询:
In [4]: Student.objects.filter(sex=1) # 等价于 where sex=1
Out[4]: <QuerySet [<Student: Michael_Lxh>, <Student: 隔壁老王>]> In [5]: Student.objects.filter(sex=1,name='Michael_Lxh')
Out[5]: <QuerySet [<Student: Michael_Lxh>]>
2)实例操作
a.查所有

b.查一条

c.查带条件的

补充网址(mysql):https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-sets.html
七.django模型系统(一)的更多相关文章
- django模型系统(二)
django模型系统(二) 常用查询 每一个django模型类,都有一个默认的管理器,objects QuerySet表示数据库中对象的列表.他可以有0到国歌过滤器.过滤器通过给定参数,缩小查询范围( ...
- django模型系统(一)
django模型系统(一) djangode ORM ORM:对像关系映射 用python概念去表达数据库 数据库配置(mysql) 安装pumysql 修改项目目录下的__init__.py imp ...
- Django模型系统——ORM校园管理系统代码
1.models.py from django.db import models # Create your models here. class Class(models.Model): id = ...
- 八.django模型系统(二)之常用查询及表关系的实现
Ⅰ.常用查询 1.几个概念 每一个django模型类,都有一个默认的管理器,objects,查询就是依赖于objects管理器进行的(在创建时就被添加了). QuerySet表示数据库中对象的列表( ...
- django模型系统二
常用查询及表关系的实现 1.常用查询 每一个django模型类,都有一个默认的管理器 objects QuerySet表示数据库中对象的列表,它可以有0到多个过滤器.过滤器通过给定参数,缩小查询范围. ...
- Django 模型系统(model)&ORM--进阶
QuerySet 可切片 使用Python 的切片语法来限制查询集记录的数目 .它等同于SQL 的LIMIT 和OFFSET 子句. >>> Entry.objects.all()[ ...
- Django模型系统——ORM
一.概论 1.ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描 ...
- python的Web框架,Django模型系统二,模型属性,及数据库进阶查询
原始数据接上篇文章来操作.可能需要查看后才能懂.点击这里查看 1.常用的模型字段类型 官方文档:https://docs.djangoproject.com/en/2.1/ref/models/fie ...
- Django 模型系统(model)&ORM--基础
ORM 映射关系: 类 ---> 表 属性 ---> 字段 对象 --->一条数据 创建表(建立模型) 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作 ...
随机推荐
- 如何让nextcloud支持avi文件在线播放
默认的nextcloud是不支持avi文件播放的,google查了一圈,都说是没法支持. 然而我觉得都是html5写的,为啥偏偏不支持. 查了一些资料,发现还是官方的代码少写了东西,可能是没考虑那么全 ...
- odoo12 物流 自动计算运费 ,采购销售使用不同计量单位自动换算
在物流和食品生鲜类行业,重量是很重要的因素,不仅要处理产品的数量,也要处理产品的重量.在多数行业,重量也是订单的重要数据. odoo原生包含了对重量的处理,下文中将指导如何优雅应用odoo原生模块处理 ...
- 48.Odoo产品分析 (五) – 定制板块(3) – 修改文件和报告(1)
查看Odoo产品分析系列--目录 不管ERP系统中的内置报表有多完善,大多数的公司仍然需要对文档和报表进行一些自定义的修改. 这一章节将介绍如何对报表的页眉和页脚做自定义修改:odoo框架如何组织报 ...
- C# 离线人脸识别 ArcSoft V2.0 Demo
本来打算做个C#版demo,但没用成功.使用虹软最新人脸识别技术开发完成 过程如下: 1. 传入一张单人脸照片: 2.调用检测人脸函数ASFDetectFaces,成功返回人脸信息的指针: 3.使用 ...
- WPF:浅析Dispatcher
本人文笔差.还是直接上代码吧.(本文假设你对WPF中的Dispatcher有一定的了解) 你觉得下面的代码可以正常执行吗? private void Button_Click(object sende ...
- C,java,Python,这些名字背后的江湖!
还记得高中的时候,有一次我们计算机老师问我们班要不要去参加市里面的C语言比赛,当时还小的我对编程世界压根就一片空白.那时候我就想啊,为什么是C语言,那么A语言,B语言或者是D语言又是什么呢? 后来就到 ...
- idea Maven项目找不到相关依赖包(红色波浪线)
前两天做项目的时候,把团队其他人的代码从git同步到自己电脑上,出现了冲突.发现是maven依赖出现了问题,之前的截图找不到了,我就简单描述一下.就是下图箭头所示位置出现了红色波浪线. 在网上找了很多 ...
- 《SQL CookBook 》笔记-第三章-多表查询-连接查询
目录 1 内连接(inner join) 1.1 隐式的内连接 1.2 显式的内连接 2 外连接(outer join) 2.1 左连接(left outer join) 2.2 右连接(right ...
- FPGA设计千兆以太网MAC(3)——数据缓存及位宽转换模块设计与验证
本文设计思想采用明德扬至简设计法.上一篇博文中定制了自定义MAC IP的结构,在用户侧需要位宽转换及数据缓存.本文以TX方向为例,设计并验证发送缓存模块.这里定义该模块可缓存4个最大长度数据包,用户根 ...
- git常用命令说明教程
git常用命令说明教程 git介绍 是一个分布式的,版本控制软件.每台使用git的电脑都是一个分版本库.svn是集中管理的. 安装git 一 git相关操作 1.官网下载最新版安装https://gi ...