Django-模型的增删改查

2019-05-16  本文已影响0人  遇明不散

模型中的增删改查

增加数据
# 以下Entry代表实体类
# 方案1
Entry.objects.create(属性=值,属性=值)
# 返回值:创建好的实体对象

# 方案2
# 创建一个 Entry 对象,并通过 save() 进行保存
obj = Entry(属性=值,属性=值)
obj.属性 = 值
obj.save()
# 无返回值,保存成功后,obj会被重新赋值

# 方案3
# 使用字典构建对象,并通过 save() 进行保存
dic = {
    '属性1':'值1',
    '属性2':'值2',
}
obj=Entry(**dic)
obj.save()
查询数据
Entry.objects.filter()
Entry.objects.exclude()
Entry.objects.filter().query
基本查询操作
Entry.objects.all()
# 返回:QuerySet(查询结果集,是一个封装了若干对象的列表)
# 可以循环遍历
查询返回指定列
# 查询所有的列并封装到字典中
Entry.objects.values()
# 查询部分列并封装到字典中
Entry.objects.values('列1','列2')
# 也允许将values() 放在其他返回查询结果集的方法的后面
Entry.objects.all().values()
Entry.objects.filter().values('列1','列2')

# 将结果封装到元组中再封装到列表中
Entry.objects.values_list()
只查询一条数据
Entry.objects.get(条件)
# 查询只返回一条数据
# 该方法只能查询一条数据
# 查询多于一条数据或没查询出结果的话那么都会抛异常
根据条件查询部分行数据
Entry.objects.filter(条件)

# 查询id为1的Author的信息
Author.objects.filter(id=1)

# 查询id为1,并且name为隔壁老王的信息
Author.objects.filter(id=1,name='隔壁老王')
# 多条件,使用 ,  隔开即可
# 用 , 隔开的条件,映射到sql中是使用 and 来连接的

# 查询age 大于等于 30 的 author 的信息
Author.objects.filter(age>=30) # 错误
# 在条件查询中,Django提供了若干查询谓词(Field Looups),可以完成非等值条件的查询
Entry.objects.filter(属性__查询谓词=值)
Author.objects.filter(age__gte=30)
对条件取反
Entry.objects.exclude(条件)

Author.objects.exclude(id=1)
# select * from index_author where not(id=1)

Author.objects.exclude(id=1,age__lt=30)
# select * from index_author where  not (id=1 and age < 30)
聚合查询(不带分组)
Entry.objects.all().aggregate(名=聚合函数('列'))

# 对Author中age求平均数
Author.objects.all().aggregate(avg=Avg('age'))

# 聚合函数
# Avg() : 平均值
# Count() :数量
# Sum() : 求和
# Min() : 最小值
# Max() : 最大值
聚合查询(带分组)
Entry.objects.all().values('列1','列2').annotate(列=聚合函数()).values('列1','列2')
# 第一个 values() 表示分组的条件
# annotate() 表示分组后执行的聚合操作
# 第二个values() 表示聚合操作后要进行字典封装的列
排序查询
Entry.objects.order_by('列1','-列2')
# 默认是升序排序,列名前加 - 则表示降序排序
F查询和Q查询
from django.db.models import F
# 给所有的age加10
Author.objects.all().update(age=F('age')+10)
from django.db.models import Q
# 查询Author中id为1 或 年龄为 48 的人的信息
Author.objects.filter(Q(id=1)|Q(age=48))
修改
修改单个实体
# 修改id=1的对象
author = Author.objects.get(id=1)
author.name = 'Jason Wang'
author.age = 25
author.email = '1097561466@qq.com'
author.save()
批量修改数据

调用QuerySet的update(属性=值,属性=值)实现批量修改

# 批量修改isActive的值
Author.objects.filter(isActive=False).update(isActive=True)
删除

调用实体对象/查询结果集的 delete() 完成删除

删除单个对象
# 删除 id=1 的对象
au = Author.objects.get(id=1)
au.delete()
删除多个对象
# 删除Author表中isActive的值为False的所有数据
auList = Author.objects.filter(isActive=False)
auList.delete()
原生的数据库操作方法(不推荐)
查询
Entry.objects.raw(sql)
# 返回:QuerySet
增删改
from django.db import connection
def doSQL(request):
    with connection.cursor() as cursor:
        sql = 'delete from ...'
        cursor.execute(sql)
        return ''
上一篇下一篇

猜你喜欢

热点阅读