zoukankan      html  css  js  c++  java
  • 模型操作代码增删查改

    from django.http import HttpResponse
    from django.shortcuts import render
    from book.models import BookInfo


    # Create your views here.
    def index(request):
    # 1.到数据库中查询书籍
    books = BookInfo.objects.all()
    # 2.组织数据
    context = {
    'books': books
    }
    # 3.传递给模板
    # render(request,'',context)

    return HttpResponse('index')


    """
    类似于 ipython的东西
    python manage.py shell
    """

    ##############################新增数据#####################################

    from book.models import BookInfo

    # 方式1
    # 会把新生成的对象返回给我们
    book = BookInfo(
    name='python',
    pub_date='2000-01-01'
    )

    # 需要手动调用save方法
    book.save()

    # 方式2 直接入库
    # objects 模型的管理类
    # 我们对模型的 增删改查 都找它
    # 会把新生成的对象返回给我们
    BookInfo.objects.create(
    name='java',
    pub_date='2010-1-1'
    )

    ##############################修改(更新)数据#####################################

    from book.models import BookInfo

    # 方式1
    # 1.先查询数据
    # select * from bookinfo where id=1
    book = BookInfo.objects.get(id=1)

    # 2. 直接修改实例的属性
    book.readcount = 20

    # 3.调用save方法
    book.save()

    # 方式2 直接更新
    # filter 过滤

    BookInfo.objects.filter(id=1).update(
    readcount=100,
    commentcount=200
    )

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

    # 方式1
    # 1. 先查询出数据
    book = BookInfo.objects.get(id=5)
    # 2.调用删除方法
    book.delete()

    # 方式2
    BookInfo.objects.filter(id=6).delete()

    ###############################基本查询#####################################


    # get 得到某一个数据
    # all 获取所有的
    # count 个数

    # select * from bookinfo where id=1
    # 返回一个对象
    book = BookInfo.objects.get(id=1)

    # 查询id 不存在的数据会抛出异常
    book = BookInfo.objects.get(id=100)
    """
    book.models.DoesNotExist: BookInfo matching query does not exist.
    """
    try:
    book = BookInfo.objects.get(id=2)
    # except Exception :
    # pass
    except BookInfo.DoesNotExist:
    pass

    # 返回所有结果,列表
    BookInfo.objects.all()

    # count
    BookInfo.objects.all().count()
    BookInfo.objects.count()

    ###############################filter,get,exclude#####################################

    """
    select from bookinfo where 条件语句
    相当于 where查询

    filter : 筛选/过滤 返回 n个结果 (n = 0/1/n)
    get : 返回1个结果
    exclude : 排除掉符合条件剩下的结果 相当于 not

    语法形式:
    以filter(字段名__运算符=值) 为例

    """
    # 查询编号为1的图书
    # get返回的是对象
    # exact 精确的 准确的 就是等于
    BookInfo.objects.get(id__exact=1)
    BookInfo.objects.get(id=1)
    # 返回列表
    BookInfo.objects.filter(id=1)
    BookInfo.objects.filter(id=1)[0]
    BookInfo.objects.filter(id__exact=1)
    # 查询书名包含'湖'的图书
    # contains 包含
    BookInfo.objects.filter(name__contains='湖')
    # 查询书名以'部'结尾的图书
    BookInfo.objects.filter(name__endswith='部')
    # 查询书名为空的图书
    BookInfo.objects.filter(name__isnull=True)
    # 查询编号为1或3或5的图书
    BookInfo.objects.filter(id__in=[1, 3, 5])
    # 查询编号大于3的图书
    # gt 大于 great 大
    # gte 大于等于 e equal 等于
    # lt 小于 less than
    # lte 小于等于
    BookInfo.objects.filter(id__gt=3)

    # 查询书籍id不为3的图书
    BookInfo.objects.exclude(id__exact=3)
    BookInfo.objects.exclude(id=3)

    # 查询1980年发表的图书
    BookInfo.objects.filter(pub_date__year='1980')

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

    # BookInfo.objects.filter(pub_date__gt='1990.1.1') #错误的


    ###############################F(了解)#####################################


    # 两个属性怎么比较 F对象
    """
    F对象的语法形式

    filter(字段名__运算符=F('字段名'))


    """
    from django.db.models import F

    # 查询阅读量大于等于评论量的图书
    BookInfo.objects.filter(readcount__gte=F('commentcount'))

    # 查询阅读量大于等于评论量2倍的图书
    BookInfo.objects.filter(readcount__gte=F('commentcount') * 2)

    ###############################Q对象(了解)#####################################

    # 需要查询id大于2 并且阅读量大于20的书籍
    # 方式1
    # filter().filter()
    BookInfo.objects.filter(id__gt=2).filter(readcount__gt=20)

    # 方式2
    # filter(条件,条件)
    BookInfo.objects.filter(id__gt=2, readcount__gt=20)

    # 需要查询id大于2 或者 阅读量大于20的书籍

    from django.db.models import Q

    """
    Q(字段名__运算符=值)

    或 Q()|Q() ..
    并且 Q()&Q() ..
    not ~Q()
    """
    BookInfo.objects.filter(Q(id__gt=2) | Q(readcount__gt=20))

    # 查询书籍id不为3
    BookInfo.objects.exclude(id=3)

    BookInfo.objects.filter(~Q(id=3))
    ###############################聚合函数(了解)#####################################

    """
    Sum,Max,Min,Avg,Count

    聚合函数需要使用 aggregate
    语法形式是: aggragte(Xxx('字段'))
    """
    # 当前数据的阅读总量
    from django.db.models import Sum, Avg, Max, Min, Count

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

    ###############################排序#####################################
    # 默认升序
    BookInfo.objects.all().order_by('readcount')
    # 降序
    BookInfo.objects.all().order_by('-readcount')

    ###############################关联查询#####################################
    """
    书籍和人物的关系是 1:n
    书籍 中没有任何关于人物的字段

    人物 中有关于书籍的字段 book 外键

    语法形式

    通过书籍查询人物信息( 已知 主表数据,关联查询从表数据)

    主表模型(实例对象).关联模型类名小写_set.all()



    通过人物查询书籍信息( 已知 从表数据,关联查询主表数据)

    从表模型(实例对象).外键

    查询书籍为1的所有人物信息
    查询人物为1的书籍信息
    """

    # 查询书籍为1的所有人物信息

    # 通过书籍 查询人物

    # 1.查询书籍
    book = BookInfo.objects.get(id=1)
    # 2.根据书籍关联人物信息
    book.peopleinfo_set.all()

    # 查询人物为1的书籍信息

    # 根据书籍 查询人物
    from book.models import PeopleInfo

    # 1.查询人物
    person = PeopleInfo.objects.get(id=1)
    # 2.根据人物关联查询书籍
    # person.book 实例对象
    person.book
    person.book.name

    ###############################关联查询的筛选#####################################
    """
    书籍和人物的关系是 1:n
    书籍 中没有任何关于人物的字段 (不要考虑隐藏的哪个字段)

    人物 中有关于书籍的字段 book 外键

    语法形式

    我们需要的是 书籍信息,已知条件是 人物信息
    我们需要的是 主表数据,已知条件是 从表信息

    filter(关联模型类名小写__字段__运算符=值)


    我们需要的是 人物信息,已知条件是 书籍信息
    我们需要是是 从表数据,已知条件是 主表信息

    filter(外键__字段__运算符=值)

    """
    """
    查询图书,要求图书人物为"郭靖"
    查询图书,要求图书中人物的描述包含"八"
    """

    # 需要的是图书,条件是人物
    BookInfo.objects.filter(peopleinfo__name__exact='郭靖')
    BookInfo.objects.filter(peopleinfo__name='郭靖')

    BookInfo.objects.filter(peopleinfo__description__contains='八')

    """
    查询书名为“天龙八部”的所有人物
    查询图书阅读量大于50的所有人物
    """
    PeopleInfo.objects.filter(book__name='天龙八部')
    PeopleInfo.objects.filter(book__name__exact='天龙八部')

    PeopleInfo.objects.filter(book__readcount__gt=50)
    # 射雕,雪山

    ###############################查询集#####################################

    [book.id for book in BookInfo.objects.all()]

    #
    a = '100'
    # 优化一下
    books = BookInfo.objects.all()

    [book.id for book in books]
    [book.id for book in books]
    [book.id for book in books]

    #######################分页##############################
    from django.core.paginator import Paginator

    books = BookInfo.objects.all()
    # object_list 结果集 /列表
    # per_page 每页多少条记录
    # object_list, per_page
    p = Paginator(books, 2)

    # 获取第几页的数据
    books_page = p.page(1)
  • 相关阅读:
    动态展示图片
    vue 字符串长度控制显示的字数超出显示省略号
    ivew-admin 校验 自定义验证表单多层嵌套
    ivew 【provide/inject] 页面刷新实现reload
    vue-ivew input 框 回车搜索功能
    php中二维数组如何使用
    页面图片按钮案例
    html页面插入flash代码
    js动态设置输入框字体/颜色
    php如何判断是手机访问还是电脑访问
  • 原文地址:https://www.cnblogs.com/zhang-da/p/14483640.html
Copyright © 2011-2022 走看看