Django框架数据库的增删改查

Django在ORM机制下的数据库增删改查

==============================================

1.增:

方法1

b.ook = BookInfo(field=value) 
book.save()

方法2

BookInfo.objects.create(field=value)
2.删:
BookInfo.objects.get().delete()
3.改:

方法1

book.name=value 
book.save() 

方法2

BookInfo.objects.get().update(name=value)

4.查

  • get()查询单个数据

注意:使用get查询,如果数据不存在会报异常DoseNotExist

book = BookInfo.objects.get(id=1)
  • all()查询全部
books = BookInfo.objects.all()
  • first()第一个 & last()最后一个
book = BookInfo.objects.first()
book = BookInfo.objects.last()
  • count()个数
BookInfo.objects.all().count()
  • 过滤查询filter()

filter()过滤出多个结果

exclude()排除符合条件剩下的结果(取反)

get()获取单个结果

三种方法的语法形式一样
语法形式:filter(字段名__运算符 = 值)

查询编号为1的图书
BookInfo.objects.get(id=1)
BookInfo.objects.get(pk=1)  # primary key
  • exact 表示判断相等
BookInfo.objects.get(id__exact=1)
简写为
BookInfo.objects.get(id=1)
BookInfo.objects.get(name='射雕英雄传')
  • filter 和 get 比较
BookInfo.objects.get(id=1)  # 单个结果 <BookInfo: 射雕英雄传>
BookInfo.objects.filter(id=1)  # 返回结果集 <QuerySet [<BookInfo: 射雕英雄传>]>
  • 字段__contains:模糊查询
BookInfo.objects.filter(name__contains="湖")
BookInfo.objects.filter(name__contains="英雄")
  • 字段__endswith & 字段__startswith:开头&结尾匹配查询
BookInfo.objects.filter(name__startswith="传")
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
BookInfo.objects.filter(id__gt=3)
BookInfo.objects.filter(id__gte=3)
BookInfo.objects.filter(id__lt=2)
BookInfo.objects.filter(id__lte=2)
  • 时间查询

年:日期字段 __year
月:日期字段__month
日:日期字段__day
周:日期字段__weekday

# 查询1980年发布的图书
BookInfo.objects.filter(pub_date__year=1980)
# 查询5月发布的图书
BookInfo.objects.filter(pub_date__month=5)
# 查询11号发布的图书
BookInfo.objects.filter(pub_date__day=11)
# 查询1990年1月1号后发表的图书
BookInfo.objects.filter(pub_date__gt='1990-1-1')
  • F对象

F对象可以实现两个属性的比较

语法格式:filter(字段名__运算符=F(‘字段名’))

from django.db.models import F

# 查询评论量大于阅读量的书籍
BookInfo.objects.filter(commentcount__gt=F('readcount'))

# 评论量 大于阅读量2倍的书籍
BookInfo.objects.filter(commentcount__gt=F("readcount") * 2)
  • Q对象

Q对象的语法形式:Q(字段名__ 运算符=值)

or :Q(字段名__ 运算符=值) | Q(字段名__ 运算符=值)
and :Q(字段名__ 运算符=值) & Q(字段名__ 运算符=值)
not :~Q(字段名__ 运算符=值)

from django.db.models import Q

# 查询id大于2或者阅读量大于20的书籍
BookInfo.objects.filter(Q(id__gt=2) | Q(readcount__gt=20))
BookInfo.objects.filter(Q(id__gte=3) | Q(commentcount__gt=80))

# 查询书籍id不为3
# exclude方式
BookInfo.objects.exclude(id=3)
# Q对象方式
BookInfo.objects.filter(~Q(id=3))

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值