Exemple #1
0
# objects 相当于模型的管理属性

book = BookInfo.objects.create(name='django',
                               pub_date='2005-1-1',
                               readcount=666,
                               commentcount=999)

#######################修改数据##################################

# 方式1
# 1. 先查询出某一个对象
# select * from bookinfo where id=6
book = BookInfo.objects.get(id=6)
# 2.调用对象的属性来赋值
book.name = 'Flask'
book.readcount = 1000
# 3. 调用save方法
book.save()

# 方式2
# select * from bookinfo where id=6
BookInfo.objects.filter(id=6).update(name='爬虫',
                                     readcount=789,
                                     commentcount=123,
                                     pub_date='2010-1-1')

####################删除数据###################################

# 方式1
# 1. 先查询出某一个对象
# select * from bookinfo where id=6
Exemple #2
0
####################################新增数据####################################
# python manage.py shell
# 方式1
from book.models import BookInfo

book = BookInfo(name='python', pub_date='2000-01-01')
book.save()
# 方式2
BookInfo.objects.create(name='java', pub_date='2021-5-10')

####################################更新数据####################################
# 方式1
# 1.查询数据
book = BookInfo.objects.get(id=1)
# 2.修改属性
book.readcount = 20
# 3.保存
book.save()
# 方式2
BookInfo.objects.filter(id=1).update(readcount=100, commentcount=100)
#################################### filter \get \exclude ####################################
"""
filter筛选过滤,返回n个结果(n=0/1/n)
get             返回1个结果
exclude排出掉符合条件剩下的结果,相当于not
语法形式
    以filter(字段名_运算符=值)为例
"""
# 查询编号为1的图书
# exact 精确的准确的就是等于
BookInfo.objects.get(id=1)
Exemple #3
0
def aaaa(request):
    ######增加数据#########
    from book.models import BookInfo

    book = BookInfo(name='水浒传')

    book

    book = BookInfo.objects.create(name='三国演义')

    #############修改数据#########
    #第一种方式
    #先获取到数据,然后再修改数据的字段
    book.readcount = 100
    #注意调用save方法
    book.save()
    #第二种修改数据的方式

    BookInfo.objects.filter(id=6).update(commentcount=200)

    #################删除数据###############

    #第一种方法
    book.delete()

    #第二种方法
    BookInfo.objects.filter(id=5).delete()

    ########查询##########
    #get查询单一结果,如果不存在抛出模型类,异常
    book = BookInfo.objects.get(id=1)
    book = BookInfo.objects.get(pk=1)  #primary
    #DoesNotExist不存在的异常
    book = BookInfo.objects.get(id=10)
    #all查询所有
    book = BookInfo.objects.all()
    #count查询数量
    count = BookInfo.objects.all().count()

    #where

    #filter过滤出多个结果,一个或者0个

    # exclude排除符合条件的剩下的结果  相当于not

    #get单一的结果

    #以filter为例子说明一下语法形式
    #filter(字段名__运算符=值)

    # 查询编号为1的图书
    book = BookInfo.objects.get(id__exact=1)
    book = BookInfo.objects.get(id=1)
    book = BookInfo.objects.get(pk=1)
    #返回的结果是列表,如果需要拿到数据需要遍历
    book = BookInfo.objects.filter(pk=1)
    # 查询书名包含'湖'的图书
    books = BookInfo.objects.filter(name__contains='湖')
    # 查询书名以'部'结尾的图书
    books = BookInfo.objects.filter(name__endswith='湖')
    # 查询书名为空的图书
    books = BookInfo.objects.filter(name__isnull=True)
    books = BookInfo.objects.filter(pub_date__isnull=True)
    # 查询编号为1或3或5的图书
    books = BookInfo.objects.filter(id_in=(1, 3))
    # 查询编号大于3的图书
    # gt 大于
    #gte大于等于
    #lt小于
    #lte小于等于
    books = BookInfo.objects.filter(id_gt=3)
    #查询编号不等于3的书籍
    books = BookInfo.objects.exclude(id=3)

    # 查询1980年发表的图书
    books = BookInfo.objects.filter(pub_date__year='2018')
    # 查询1990年1月1日后发表的图书
    books = BookInfo.objects.filter(pub_date__gt='1990-1-1')

    #查询评论数大于阅读数量的书籍

    from django.db.models import F
    #F(‘字段’)
    #只需要把常量值换成F
    books = BookInfo.objects.filter(commentcount__gt=F('readcount'))
    #查询评论数大于阅读数量2倍的书籍
    books = BookInfo.objects.filter(commentcount__gt=F('readcount') * 2)

    #多个逻辑关系
    #查询阅读数量大于30并且id>3的书籍
    #第一种写法
    books = BookInfo.objects.filter(readcount__gt=30, id__gt=3)

    #第二种写法
    books = BookInfo.objects.filter(readcount__gt=30).filter(id__gt=3)
    # Q对象就是相当于or
    #语法形式Q(字段__运算符=值)|  Q(字段__运算符=值)
    from django.db.models import Q

    book = BookInfo.objects.filter(Q(readcount__gt=30) | Q(id__gt=3))

    #查询id不等于3的
    #还可以使用~Q查询
    books = BookInfo.objects.filter(~Q(id=3))

    #聚合函数
    #aggregate 和 聚合函数Avg  Sum Man Min Count配合使用
    from django.db.models import Sum, Max, Min, Avg, Count

    book = BookInfo.objects.aggregate(Sum('readcount'))

    #order_by(字段)
    #默认升序
    book = BookInfo.objects.all().order_by('id')

    #降序
    book = BookInfo.objects.all().order_by('-id')

    #多个字段排序的原理是第一个字段的值相等,按着第二个字段排序
    books = BookInfo.objects.all().order_by('readcount', 'commentcount')

    #关联查询
    # 查询书籍为1的所有人物信息
    #先找到书籍为1的书,再通过书查到任务信息
    books = BookInfo.objects.get(id=1)
    people = books.peopleinfo_set.all()
    # 查询人物为1的书籍信息
    #先查询人物再查寻书记
    from book.models import PeopleInfo
    person = PeopleInfo.objects.get(id=1)
    person.book.name

    #关联查询的筛选
    # 查询图书,要求图书人物为    "郭靖"  一对多的查询
    #先查询出图书,再查出图书中名字为郭靖的人
    book = BookInfo.objects.filter(peopleinfo__name='郭靖')

    # 查询图书,要求图书中人物的描述包含    "八"
    book = BookInfo.objects.filter(peopleinfo__description__contains='八')

    #多对一

    # 查询书名为“天龙八部”的所有人物
    people = PeopleInfo.objects.filter(book__name='天龙八部')

    # 查询图书阅读量大于30的所有人物
    people = PeopleInfo.objects.filter(book__readcount__gt=30)

    # filter order_by , exclude  all
    #他们都是chacun结果,可以理解为对象列表
    books = BookInfo.objects.all()

    #缓存就是将数据放置到一个地方(本地)
    # [book.id for book in BookInfo.objects.all()]

    # limit offset page
    #限制查询结果集
    books = BookInfo.objects.all()[0:2]

    return HttpResponse('ok')