Django框架——ORM数据库操作
目录
- 一.增加
- 二.删除
- 三.修改
- 四.查询
- 1.基本查询
- 2.过滤查询
- 3.过滤条件语法
- 4.F对象和Q对象
- 5.聚合函数
- 6.排序函数
- 7.关联查询
测试数据:BookInfo表
PeopleInfo表
一.增加
1.save:
对象 = 模型类(
字段名 = 值,
字段名 = 值,
…
)
对象.save()
例:
>>> book = BookInfo(
... name='python入门',
... pub_date='2010-1-1'
... )
>>> book.save()
>>> book
<BookInfo: python入门>
2.create:
模型类.objects.create(
字段名 = 值,
字段名 = 值,
…
)
例:
>>> PeopleInfo.objects.create(
... name='itheima',
... book=book
... )
<PeopleInfo: itheima>
二.删除
1.模型类对象delete:
对象 = 模型类.objects.get(条件)
对象.delete()
例:
>>> person = PeopleInfo.objects.get(name='传智播客')
>>> person.delete()
(1, {'book.PeopleInfo': 1})
2.模型类.objects.filter().delete():
模型类.objects.filter(条件).delete()
例:
>>> BookInfo.objects.filter(name='python入门').delete()
(1, {'book.BookInfo': 1, 'book.PeopleInfo': 0})
三.修改
1.save:
对象 = 模型类.objects.get(条件)
对象.属性 = 值
对象.save()
例:
>>> person = PeopleInfo.objects.get(name='itheima')
>>> person.name = 'itcast'
>>> person.save()
>>> person
<PeopleInfo: itcast>
2.update:
模型类.objects.filter(条件).update(属性=值) (返回的是受影响的行数)
例:
>>> PeopleInfo.objects.filter(name='itcast').update(name='传智播客')
1
四.查询
1.基本查询
get:查询单一结果,不存在会抛出DoesNotExist异常。(查询结果不是1个也会报错)
all:查询多个结果。
count:查询结果数量。
用法:模型类.objects.get/all/count()
2.过滤查询
filter:过滤出多个结果
exclude:排除掉符合条件剩下的结果
get:过滤出单一结果
3.过滤条件语法
用法:属性名称__比较运算符 = 值
exact:相等
例:查询编号为1的图书。
BookInfo.objects.filter(id__exact=1)
可简写为:
BookInfo.objects.filter(id=1)
contains:包含
例:查询书名包含’传’的图书。
BookInfo.objects.filter(name__contains='传')
<QuerySet [<BookInfo: 射雕英雄传>]>
startswith/endswith:以指定值开头/结尾
例:查询书名以’部’结尾的图书
>>> BookInfo.objects.filter(name__endswith='部')
<QuerySet [<BookInfo: 天龙八部>]>
isnull:是否为空
例:查询书名为空的图书。
>>> BookInfo.objects.filter(name__isnull=True)
<QuerySet []>
in:是否包含在范围内
例:查询编号为1或3或5的图书
>>> BookInfo.objects.filter(id__in=[1,3,5])
<QuerySet [<BookInfo: 射雕英雄传>, <BookInfo: 笑傲江湖>]>
gt/gte/lt/lte:比较查询,分别为大于,大于等于,小于,小于等于
例:查询编号大于3的图书
>>> BookInfo.objects.filter(id__gt=3)
<QuerySet [<BookInfo: 雪山飞狐>]>
year/month/day/week_day/hour/minute/second:时间日期
例:查询1980年发表的图书。
>>> BookInfo.objects.filter(pub_date__year=1980)
<QuerySet [<BookInfo: 射雕英雄传>]>
4.F对象和Q对象
F对象:用来比较两个属性(使用前需要导入)
用法:F(属性名)
例:查询阅读量大于等于评论量的图书。
>>> from django.db.models import F
>>> BookInfo.objects.filter(readcount__gt=F('commentcount'))
<QuerySet [<BookInfo: 雪山飞狐>]>
Q对象:实现逻辑或or的查询
用法:Q(属性名__运算符=值),也可在前面加~表示not
例:查询阅读量大于20,或编号小于3的图书
>>> BookInfo.objects.filter(Q(readcount__gt=20)|Q(id__lt=3))
<QuerySet [<BookInfo: 射雕英雄传>, <BookInfo: 天龙八部>, <BookInfo: 雪山飞狐>]>
5.聚合函数
聚合函数:可使用aggregate()过滤器调用聚合函数(Avg,Count,Max,Min,Sum)
用法:模型类.objects.aggregate(聚合函数(字段名))
例:查询图书的总阅读量。
>>> from django.db.models import Sum
>>> BookInfo.objects.aggregate(Sum('readcount'))
{'readcount__sum': 126}
返回值为字典类型:{'属性名__聚合类小写':值}
注意:使用count一般不用使用过滤器
例:查询图书总数。
BookInfo.objects.count()
返回值为一个数字
6.排序函数
用法:模型类.objects.all().order_by(属性名)
默认升序排序,属性名前加-为降序
例:
# 默认升序
>>> BookInfo.objects.all().order_by('readcount')
<QuerySet [<BookInfo: 射雕英雄传>, <BookInfo: 笑傲江湖>, <BookInfo: 天龙八部>, <BookInfo: 雪山飞狐>]># 降序
>>> BookInfo.objects.all().order_by('-readcount')
<QuerySet [<BookInfo: 雪山飞狐>, <BookInfo: 天龙八部>, <BookInfo: 笑傲江湖>, <BookInfo: 射雕英雄传>]>
7.关联查询
一到多的访问:
用法:一对应的模型类对象.多对应的模型类名小写_set
例:查询id为1的书籍人物
>>> book = BookInfo.objects.get(id=1)
>>> book.peopleinfo_set.all()
<QuerySet [<PeopleInfo: 郭靖>, <PeopleInfo: 黄蓉>, <PeopleInfo: 黄药师>, <PeopleInfo: 欧阳锋>, <PeopleInfo: 梅超风>]>
多到一的访问:
用法:多对应的模型类对象.多对应的模型类中的关系类.属性名
例:查询id为1的人物的书籍
>>> person = PeopleInfo.objects.get(id=1)
>>> person.book.name
‘射雕英雄传’
关联过滤查询:
用法:关联模型类名小写__属性名__条件运算符=值
例:查询图书,要求图书中人物的描述包含"八"
>>> book = BookInfo.objects.filter(peopleinfo__description__contains='八')
>>> book
<QuerySet [<BookInfo: 射雕英雄传>, <BookInfo: 天龙八部>]>
查询图书阅读量大于30的所有人物
>>> people = PeopleInfo.objects.filter(book__readcount__gt=30)
>>> people
<QuerySet [<PeopleInfo: 乔峰>, <PeopleInfo: 段誉>, <PeopleInfo: 虚竹>, <PeopleInfo: 王语嫣>, <PeopleInfo: 胡斐>, <PeopleInfo: 苗若兰>, <PeopleInfo: 程灵素>, <PeopleInfo: 袁紫衣>]>
Django框架——ORM数据库操作相关推荐
- Django框架之数据库操作
文章目录 一.前言 二.数据库配置 三.数据表创建 1.单表创建 2.关联表创建 四.ORM增删改查 1.新增数据(C) (1)创建单表数据 (2)创建从表数据 2.读取数据(R) (1)读取多条数据 ...
- Django框架——模型(数据库操作)
-- models.py -- ORM(object-relation mapping) 实现数据模型与数据库的解耦: # 对象,关系,映射: 1.根 据对象的类型生成表结构: 2.将对象.列表的操作 ...
- 在线车辆推荐网 Python语言+Django框架+Mysql数据库 基于用户、物品的协同过滤推荐算法 开发在线汽车推荐系统 二手车网站推荐系统 分布式大数据、机器学习、人工智能开发
在线车辆推荐网 Python语言+Django框架+Mysql数据库 基于用户.物品的协同过滤推荐算法 开发在线汽车推荐系统 二手车网站推荐系统 分布式大数据.机器学习.人工智能开发 CarRecom ...
- 关于Django中的数据库操作API之distinct去重的一个误传
django提供的数据库操作API中的distinct()函数,了解SQL语句的读者都应该知道,DISTINCT关键字可以在select操作时去重.django里的这个distinct()函数也是这个 ...
- Django ORM 数据库操作
比较有用 转自 http://blog.csdn.net/fgf00/article/details/53678205 一.DjangoORM 创建基本类型及生成数据库表结构 1.简介 2.创建数据库 ...
- Django(三) ORM 数据库操作
大纲 一.DjangoORM 创建基本类型及生成数据库表结构 1.简介 2.创建数据库 表结构 二.Django ORM基本增删改查 1.表数据增删改查 2.表结构修改 三.Django ...
- ORM映射框架总结--数据库操作库(精修版)
1. ORM数据库操作原理 前面已经介绍过了个人ORM映射框架中的三个核心库: 实体-数据库 映射特性关系: http://www.cnblogs.com/qingyuan/archive ...
- PHP学习笔记——在phalapi框架内的orm数据库操作
今天将自己的聚合支付接口集成到了phal框架内,由于在phalapi框架内如何返回视图不知道,因此需要将原本的wap站点的sdk包转化为api资源.具体过程稍晚点记录,现在将phalapi框架内的数据 ...
- Django模型之数据库操作-查询
六.数据库操作-查询 6.1基础条件查询 1 基本查询 get查询单一结果,如果不存在会抛出模型类.DoesNotExist异常. all查询多个结果.[返回的所有结果是列表] count查询结果数量 ...
最新文章
- Vue添加新的响应式属性
- ruby 工程的创建 使用JetBrains RubyMine建立rails 工程
- [整理+原创]ubuntu Thunderbird Mail设置自动提醒
- 阿里云ECS服务器磁盘空间异常,或者爆满
- 计算机考研落榜了怎么办,考研落榜了怎么办
- 我对无服务器架构的一些看法
- keil4 如何生成bin文件
- 第二篇 : JShell 工具
- 视频教程-大学数学实验(MATLAB版)-其他
- Winform2、(C#) 设置编译后.exe执行文件的图标
- UEFI+GPT双硬盘安装Win10+Ubuntu16.04双系统
- Android Studio记录一个错误:解析软件包时出现问题
- CM安装成功,CM的web界面登录不上解决方案
- UiBot 邮件附件
- nginx——keepalived
- 25 年前 Java 诞生,把你对她的热爱大声说出来好吗
- 【圆梦名企】上海CA、StarRocks、亚信科技、贝壳找房、博乐科技、学科网众多岗位JD解读直播预告
- 一款开源 OA 办公自动化系统
- 4G物联网设备使用经验--深刻的教训
- Python函数文件练习题汇总
热门文章
- BLOB,TEXT GEOMETRY or JSON column 'xxx' can't have a default value query问题解决
- Windows Server 2008 R2 域控DOS命令
- flask笔记3-模板
- 关于数组方面的算法分析
- 线段树 + 字符串Hash - Codeforces 580E Kefa and Watch
- PHPCMS V9 为今天或几天前文章加new
- 由Java说起:编程语言还需要开源吗?
- 面试官系统精讲Java源码及大厂真题 - 39 经验总结:不同场景,如何使用线程池
- 如约而至,Java 10 正式发布:包含 109 项新特性
- ORACLE Dataguard安装