Django框架——ORM数据库操作

目录

    • 一.增加
    • 二.删除
    • 三.修改
    • 四.查询
      • 1.基本查询
      • 2.过滤查询
      • 3.过滤条件语法
      • 4.F对象和Q对象
      • 5.聚合函数
      • 6.排序函数
      • 7.关联查询


测试数据:BookInfo表

Django框架——ORM数据库操作_第1张图片
PeopleInfo表
Django框架——ORM数据库操作_第2张图片

一.增加

1.save:
对象 = 模型类(
字段名 = 值,
字段名 = 值,

)
对象.save()
例:

>>> book = BookInfo(
...         name='python入门',
...         pub_date='2010-1-1'
...     )
>>> book.save()
>>> book

2.create:
模型类.objects.create(
字段名 = 值,
字段名 = 值,

)
例:

>>> PeopleInfo.objects.create(
...         name='itheima',
...         book=book
...     )

二.删除

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

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='传')
]>

startswith/endswith:以指定值开头/结尾
例:查询书名以’部’结尾的图书

>>> BookInfo.objects.filter(name__endswith='部')
]>

isnull:是否为空
例:查询书名为空的图书。

>>> BookInfo.objects.filter(name__isnull=True)

in:是否包含在范围内
例:查询编号为1或3或5的图书

>>> BookInfo.objects.filter(id__in=[1,3,5])
, ]>

gt/gte/lt/lte:比较查询,分别为大于,大于等于,小于,小于等于
例:查询编号大于3的图书

>>> BookInfo.objects.filter(id__gt=3)
]>

year/month/day/week_day/hour/minute/second:时间日期
例:查询1980年发表的图书。

>>> BookInfo.objects.filter(pub_date__year=1980)
]>

4.F对象和Q对象

F对象:用来比较两个属性(使用前需要导入)
用法:F(属性名)
例:查询阅读量大于等于评论量的图书。

>>> from django.db.models import F
>>> BookInfo.objects.filter(readcount__gt=F('commentcount'))
]>

Q对象:实现逻辑或or的查询
用法:Q(属性名__运算符=值),也可在前面加~表示not
例:查询阅读量大于20,或编号小于3的图书

>>> BookInfo.objects.filter(Q(readcount__gt=20)|Q(id__lt=3))
, , ]>

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')
, , , ]>

# 降序
>>> BookInfo.objects.all().order_by('-readcount')
, , , ]>

7.关联查询

一到多的访问:
用法:一对应的模型类对象.多对应的模型类名小写_set
例:查询id为1的书籍人物

>>> book = BookInfo.objects.get(id=1)
>>> book.peopleinfo_set.all()
, , , , ]>

多到一的访问:
用法:多对应的模型类对象.多对应的模型类中的关系类.属性名
例:查询id为1的人物的书籍

>>> person = PeopleInfo.objects.get(id=1)
>>> person.book.name
‘射雕英雄传’

关联过滤查询:
用法:关联模型类名小写__属性名__条件运算符=值
例:查询图书,要求图书中人物的描述包含"八"

>>> book = BookInfo.objects.filter(peopleinfo__description__contains='八')
>>> book
, ]>

查询图书阅读量大于30的所有人物

>>> people = PeopleInfo.objects.filter(book__readcount__gt=30)
>>> people
, , , , , , , ]>

你可能感兴趣的:(学习笔记)