本文实例讲述了Django框架ORM数据库操作。分享给大家供大家参考,具体如下:
测试数据: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.基本查询
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的Python程序设计有所帮助。
Django,ORM数据库
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 黑鸭子2010-再度重相逢[首版][WAV+CUE]
- 【原神手游】5.2版本圣遗物优化详情
- 方季惟.1989-一生只爱一次【蓝与白】【WAV+CUE】
- 群星.1997-强力舞曲总动员【金点】【WAV+CUE】
- 盘尼西林.2024-岛与黎明【智慧大狗】【FLAC分轨】
- 刀郎《柔情经典》 2CD[WAV分轨][3.8G]
- 群星2024《民谣精选》原音母版1:1直刻[低速原抓WAV+CUE][1.1G]
- 经典《泰坦尼克号原声大碟》[WAV+DSF+FLAC多版][5.2G]
- 魔兽世界兽王猎输出宏代码是什么 兽王猎翻页输出宏命令代码分享
- 魔兽世界wlk野德一键输出宏是什么 wlk野德一键输出宏介绍
- wlk鸟德一键输出宏是什么 wlk鸟德一键输出宏介绍
- 《明末:渊虚之羽》外网新宣传:有勇气面对障碍吗?
- 视觉盛宴!V社公布《看火人》团队新作水面物理效果演示
- 张艺谋呼吁观众走进影院看电影:对解说短视频很无语
- 车载音乐最强享受 《车载极致女声精选》[WAV分轨][1G]