django的ORM操作


前言

做个记录,方便以后使用


一、基本操作

1.增删改查

Obj为模型类对象

# 添加一条数据,data是一个字典,**data可以展开字典
Obj.objects.create(**data)
# 删除一条数据,get里面写待删除数据满足的条件
Obj.objects.get(id=id).delete()
# 更新数据,filter里面写待删除数据满足的条件,data是一个字典,**data可以展开字典
Obj.objects.filter(id=id).update(**data)
# 查询数据,获取单条数据
Obj.objects.get(id=id)
# 查询数据,获取多条数据
Obj.objects.filter(sex="男")
# 获取所有数据
Obj.objects.all()

2.复杂的增删改查

# 删除所有满足条件的数据
Obj.objects.filter(sex="男").delete()
# 模糊查询
Obj.objects.filter(name__contains="李")
# 查询age大于20的数据,__gte:大于等于;__lt:小于;__lte:小于等于
Obj.objects.filter(age__gt=20)
# 查询名字中不带有‘李’的数据
Obj.objects.exclude(name__contains="李")
# 查询名字以‘李’开头的数据,name__endswitch:查询以某字符为结尾的数据
User.objects.filter(name__startswith="李")

3.其他操作

# 降序排序,不加-号是升序
Obj.objects.order_by('-name')

二、高阶操作

1.F查询

作用:可以获取对应字段属性并进行操作

from django.db.models import F,Q
#F 可以获取对象中的字段的属性(列),并且对其进行操作;
models.Book.objects.all().update(price=F('price')+1)   #对图书馆里的每一本书的价格 上调1块钱

2.Q查询

作用:将查询条件使用逻辑关系(&、|、~)组合起来
语法:
fifter(Q(查询条件1)| Q(查询条件2))
fifter(Q(查询条件2)& Q(查询条件3))
fifter(Q(查询条件4)& ~Q(查询条件5))
fifter(Q(查询条件6)| Q(Q(查询条件4)& ~ Q(Q(查询条件5)& Q(查询条件3)))包含

from django.db.models import F,Q
    # 1、F 可以获取对象中的字段的属性(列),并且对其进行操作;
    # models.Book.objects.all().update(price=F('price')+1)
    # 2、Q多条件组合查询
    #如果 多个查询条件 涉及到逻辑使用 fifter(,隔开)可以表示与,但没法表示或非得关系
    #查询 书名包含作者名的书
    book=models.Book.objects.filter(title__icontains='伟',author__name__contains='伟').values('title')
    #如何让orm 中得 fifter 支持逻辑判断+多条件查询? Q()登场
    book=models.Book.objects.filter(Q(title__icontains='伟') & Q(author__name__contains='伟')).values('title')
    book=models.Book.objects.filter(Q(author__name__contains='伟') & ~Q(title__icontains='伟')).values('title')

   #多条件包含组合查询
   #查询作者姓名中包含 方/少/伟/书名包含伟3字 并且出版社地址以山西开头的书
    book=models.Book.objects.filter(
                                    Q(
                                    Q(author__name__contains='方') |
                                    Q(author__name__contains='少') |
                                    Q(title__icontains='伟')|
                                    Q(author__name__contains='伟')
                                    )
                                    &
                                    Q(publish__addr__contains='山西')
                                    ).values('title')
    print(book)
    return HttpResponse('OK')

注意:Q查询条件和非Q查询条件混合使用注意,不包Q()的查询条件一点要放在Q(查询条件)后面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值