美文网首页
Django-模型的增删改查

Django-模型的增删改查

作者: 遇明不散 | 来源:发表于2019-05-16 22:15 被阅读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 调用查询接口函数
Entry.objects.filter()
Entry.objects.exclude()
  • 所有的查询接口函数,都可以通过一个 query 属性来得到对应的sql语句
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查询
  • F() 在执行中获取某列的值
from django.db.models import F
# 给所有的age加10
Author.objects.all().update(age=F('age')+10)
  • Q() 在查询条件中可以完成 or 操作
from django.db.models import Q
# 查询Author中id为1 或 年龄为 48 的人的信息
Author.objects.filter(Q(id=1)|Q(age=48))
修改
修改单个实体

  • 通过 get() 得到要修改的实体对象

  • 通过对象的属性修改对象的值
  • 保存
    通过对象的save()保存回数据库
# 修改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 ''

相关文章

  • Django-模型的增删改查

    模型中的增删改查 增加数据 查询数据 所有接口必须通过 Entry.objects 调用查询接口函数 所有的查询接...

  • mysql的插入语句

    MySQL增删改查之增insert、replace

  • MYSQL数据库的增删改查

    MYSQL数据库的增删改查 一.对于库的增删改查 增create database 库名称;create data...

  • 关于python的list的增查删改

    说到增查删改,想起了数据库,我们在关系型数据库当中就会对表进行增查删改。 在python当中我们也可以对list进...

  • 0812 A

    mongodb 增删改查 增: db.createCollection("name", {options:numb...

  • 增删改

    对于表中的操作,就是增删改查,查内容较多,这里先说增删改。 1.增(insert或者load) 即插入数据,多行插...

  • SQL查询结构总结

    SQL 增删改查 对数据库有修改的操作是:增删改 增 insert into 表名 values(); 删 del...

  • 2018-03-03

    rails c增删改查 增:user = User.create(name:'Jack', age:'18') 删...

  • 函数和增删改查(运用)

    增删改查 (基本命令) 1 . 增 inset(position,value)append(value)exten...

  • 表内容的操作

    对表数据进行增删改查(curd) 增(insert into): auto_increment自增长 SELECT...

网友评论

      本文标题:Django-模型的增删改查

      本文链接:https://www.haomeiwen.com/subject/taawaqtx.html