Django框架模型简单介绍与使用分析


Posted in Python onJuly 18, 2019

本文实例讲述了Django框架模型简单介绍与使用。分享给大家供大家参考,具体如下:

ORM介绍

  • ORM Object relational mapping 对象关系映射
  • 把面向对象中的类和数据库表一一对应起来,通过操作类和对象,对数据库表实现数据的增删改查等操作,而不需要写SQL语句(由orm框架生成)
  • Django是实现了ORM的一个框架,在django项目与数据库之间起着桥梁的角色。

使用ORM可以通过方便的配置,切换使用不同的数据库

Django框架模型简单介绍与使用分析

使用django进行数据库开发的步骤如下:

  1. 在models.py中定义模型类
  2. 生成迁移文件: python manage.py makemigrations
  3. 执行迁移生成数据库表(默认使用sqlite3数据库,生成的数据库名为:db.sqlite3): python manage.py migrate
  4. 通过模型类和对象,对数据进行增删改查

模型类设计

案例:

部门类(Department):

  • 部门名称: name

  • 部门成立时间: create_date

员工类(Employee)

  • 性名: name

  • 年龄: age

  • 性别: sex

  • 工资: salary

  • 备注信息: comment

说明:

在应用models.py中编写模型类, 必须继承与models.Model类

在模型类中,定义属性,生成对应的数据库表字段:

属性名 = models.字段类型(字段选项)

字段类型(初步了解,models包下的类):

  1. CharField--字符串
  2. IntegerField--整形
  3. BooleanField--布尔
  4. DateFiled--日期
  5. DecimalFiled--浮点
  6. ForeignKey--外键,建立一对多关系

不需要定义主键id,会自动生成

模型类生成表

根据模型类,生成迁移文件

python manage.py makemigrations

执行迁移文件生成数据库表

python manage.py migrate

生成表名的默认格式:

应用名_模型类名小写

使用sqliteman查看生成的数据库表

安装sqliteman

sudo apt-get install sqliteman

启动sqliteman

sqliteman

启动后,通过file -> open 打开项目下的db.sqlite3数据库进行查看

通过ORM操作数据库

  • Django实现了orm功能,在django项目中,不需要写sql语句,通过模型类和对象,就可以直接操作数据库数据了。

可以通过以下命令,进入python交互环境,执行操作数据库的代码:

python manage.py shell

增删改

调用一个模型类对象的save方法, 就可以实现数据新增或修改。id值在数据库表中不存在或者为空,则新增,否则为修改。

模型类对象.save()  # 新增或修改

调用一个模型类对象的delete方法,就可以实现数据删除,会根据id删除。

模型类对象.delete() # 根据对象的id进行删除

示例:

from app01.models import Department, Employee
from datetime import date
d = Department()
d.name ='研发部'
d.create_date = date(2017,1,1)
d.save() # 新增
d.name ='人事部'
d.save() # 修改
d.id = 10
d.save() # 新增
d.name = '研发部'
d.id = None
d.save() # 新增
d.id = None
d.save() # 新增
d.delete() # 删除

模型管理器

每个模型类默认都有 objects 类属性,可以把它叫 模型管理器。它由django自动生成,类型为 django.db.models.manager.Manager

>>> Employee.objects
<django.db.models.manager.Manager object at 0x7fcfcdf67550>

objects模型管理器中提供了一些查询数据的方法:

objects管理器中的方法 返回类型 作用
模型类.objects.get() 模型对象 返回一个对象,且只能有一个: 如果查到多条数据,则报错:MultipleObjectsReturned 如果查询不到数据,则报错:DoesNotExist
模型类.objects.filter() QuerySet 返回满足条件的对象
模型类.objects.all() QuerySet 返回所有的对象

关联查询

部门和员工是一对多的关系,怎么根据部门查员工,或根据员工查询部门呢?

用法:

假设在一对多关系中,一对应的类叫做一类,多对应的类叫做多类:

由一类对象查询多类对象:

一类对象.多类名小写_set.all()

由多类对象查询一类对象:

多类对象.关联属性

示例:

# 查询部门id为1的所有员工
d = Department.objects.get(id=1)
d.employee_set.all() # 一查多
# 查询id为1的员工所属的部门信息
e = Employee.objects.get(id=1)
e.department   # 多查一

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
用Python实现通过哈希算法检测图片重复的教程
Apr 02 Python
详解Python的Django框架中inclusion_tag的使用
Jul 21 Python
Python基础语言学习笔记总结(精华)
Nov 14 Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
Dec 05 Python
Python设计模式之命令模式原理与用法实例分析
Jan 11 Python
python程序快速缩进多行代码方法总结
Jun 23 Python
基于Python fminunc 的替代方法
Feb 29 Python
Python headers请求头如何实现快速添加
Nov 03 Python
用python批量移动文件
Jan 14 Python
python 制作网站小说下载器
Feb 20 Python
Python中Qslider控件实操详解
Feb 20 Python
Python中递归以及递归遍历目录详解
Oct 24 Python
python使用pandas处理excel文件转为csv文件的方法示例
Jul 18 #Python
django 2.2和mysql使用的常见问题
Jul 18 #Python
详解Python二维数组与三维数组切片的方法
Jul 18 #Python
Django框架视图介绍与使用详解
Jul 18 #Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
Jul 18 #Python
使用django实现一个代码发布系统
Jul 18 #Python
python 将字符串中的数字相加求和的实现
Jul 18 #Python
You might like
Windows中安装Apache2和PHP4权威指南
2006/11/18 PHP
php Undefined index和Undefined variable的解决方法
2008/03/27 PHP
javascript 兼容鼠标滚轮事件
2009/04/07 Javascript
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
JavaScript插件化开发教程 (二)
2015/01/27 Javascript
js漂浮广告实现代码
2015/08/15 Javascript
jquery实现移动端点击图片查看大图特效
2020/09/11 Javascript
JS实现字符串转日期并比较大小实例分析
2015/12/09 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
JS公共小方法之判断对象是否为domElement的实例
2016/11/25 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
2017/01/23 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
node crawler如何添加promise支持
2020/02/01 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
[03:52]显微镜下的DOTA2第三期——英雄在无聊的时候干什么
2014/06/20 DOTA
[53:10]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs VG 第一场
2018/04/11 DOTA
[45:32]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
2017/08/18 Python
对Python定时任务的启动和停止方法详解
2019/02/19 Python
Django中modelform组件实例用法总结
2020/02/10 Python
使用IPython或Spyder将省略号表示的内容完整输出
2020/04/20 Python
python openpyxl模块的使用详解
2021/02/25 Python
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
伦敦所有西区剧院演出官方票务代理:Theatre Tickets Direct
2017/05/26 全球购物
美国领先的水果篮送货公司和新鲜水果供应商:The Fruit Company
2018/02/13 全球购物
市场安全管理制度
2014/01/26 职场文书
法学函授自我鉴定
2014/02/06 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
四查四看整改措施
2014/09/19 职场文书
2015年信贷员工作总结
2015/04/28 职场文书
新人入职感言
2015/07/31 职场文书
食堂卫生管理制度
2015/08/04 职场文书
Windows7下FTP搭建图文教程
2022/08/05 Servers
JS前端轻量fabric.js系列之画布初始化
2022/08/05 Javascript