• orm


    orm——13

    import os
    
    if __name__ == '__main__':
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day68_orm.settings")
        import django
    
        django.setup()
    
        from app01 import models
    
        # all 查询所有数据  ——》QuerySet
        ret = models.Person.objects.all()
        # print(ret)
    
        # get 获取一个对象  如果查询没有或者多个  就报错
        ret = models.Person.objects.get(id=1)
        ret = models.Person.objects.get(name='和尚')
        # print(ret)
    
        # filter 查询所有满足条件的对象  ——》QuerySet
        ret = models.Person.objects.filter(id=1)
        ret = models.Person.objects.filter(name='杜举飞1')
    
        # exclude 查询所有不满足条件的对象  ——》QuerySet
        ret = models.Person.objects.exclude(id=1)
    
        # values 不写参数 取对象的所有字段数据  指定参数  取对象指定字段的参数 ——》QuerySet  元素是字典
        ret = models.Person.objects.values('name','age')
        # print(ret)
    
        # print('*'*120)
        # for i in ret:
        #     print(i,type(i))
    
        # values_list
        # 不写参数 取对象的所有字段数据 元组形式
        # 指定参数 取对象指定字段的参数 ——》QuerySet  按照你参数顺序排序
        ret = models.Person.objects.values_list('age','name')
        # print(ret)
        #
        # print('*'*120)
        # for i in ret:
        #     print(i,type(i))
    
        # order_by 按照指定字段排序 默认升序  加负号降序
        # 可以多字段排序
        ret =models.Person.objects.all().order_by('age','-id')
        # for i in ret:
        #     print(i,i.id,i.age)
    
    
        # reverse 对已经排序的QuerySet进行反向排序
        # 用了order_by  要不用了ordering
        ret =models.Person.objects.all().order_by('age','-id').reverse()
        # for i in ret:
        #       print(i,i.id,i.age)
    
        # ret = models.Person.objects.all()
        # print(ret)
        # ret = models.Person.objects.all().reverse()
        # print(ret)
    
        # distinct 去重
    
    
        # count() 计数  对QuerySet的对象进行计数
        ret = models.Person.objects.filter(id=100).count()
    
        # first 取QuerySet中的第一元素
        ret = models.Person.objects.all().first()
    
    
        ret = models.Person.objects.last()
    
        # print(ret)
        ret = models.Person.objects.filter(id=100).exists()
        print(ret)
    
    
    """
    返回QuerySet的方法:
    1. all()
    2. filter()
    3. exclude()
    4. values()
    5. values_list()
    6. reverse()
    7. distinct()
    8. order_by()
    
    返回具体对象的方法:
    1. get()
    2. first()
    3. last()
    
    返回数字的方法:
    1. count()
    
    返回布尔值:
    1. exists()
    """

    2双下划线

    import os
    
    if __name__ == '__main__':
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day68_orm.settings")
    
        import django
        django.setup()
    
        from app01 import models
        ret = models.Person.objects.filter(id__gt=1)
        ret = models.Person.objects.filter(id__lt=5)   # less than
        ret = models.Person.objects.filter(id__gte=3)
        ret = models.Person.objects.filter(id__lte=3)
        ret = models.Person.objects.filter(id__gte=3,id__lte=5)
    
        ret = models.Person.objects.filter(id__in=[1,3,5,7,9,])     # in
        ret = models.Person.objects.exclude(id__in=[1,3,5,7,9,])    # not in
    
        ret = models.Person.objects.filter(name__contains='du')
        ret = models.Person.objects.filter(name__icontains='du')
    
        ret = models.Person.objects.filter(id__range=[1,5])
        ret = models.Person.objects.filter(name__startswith='')
        ret = models.Person.objects.filter(name__endswith='')
    
        # ret = models.Person.objects.filter(birth__contains='2018-06')
        # ret = models.Person.objects.filter(birth__month=6)
        # ret = models.Person.objects.filter(birth__day=1)
    
        print(ret)

    外键

    import os
    
    if __name__ == '__main__':
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day68_orm.settings")
        import django
    
        django.setup()
    
        from app01 import models
    
        # 正向查询
        # 基于对象查询
    
        # book_obj = models.Book.objects.filter(id=5).first()
        # print(book_obj.title)
        # print(book_obj.publisher)
        # print(book_obj.publisher.id)
        # print(book_obj.publisher.name)
    
        # 基于字段查询
        # ret = models.Book.objects.filter(publisher__name='沙河出版社')
        ret = models.Book.objects.filter(publisher__id=1)
        # print(ret)
        # for i in ret:
        #     print(i.publisher.name)
    
        # 反向查询
        # 没有指定related_name,使用pub_obj.book_set.all() 拿所有出版社关联的书籍对象
        # ret = models.Publisher.objects.get(id=1)
        # print(ret.book_set.all())
    
        # 指定related_name = 'books',使用pub_obj.books.all() 拿所有出版社关联的书籍对象
        # print(ret.books.all())
    
        # 基于字段查询
        ret = models.Publisher.objects.filter(books__title='跟金老板学开车')
        print(ret)

    多对多

    import os
    
    if __name__ == '__main__':
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day68_orm.settings")
        import django
    
        django.setup()
    
        from app01 import models
    
        author_obj = models.Author.objects.first()
        # print(author_obj.books.all())
        # print(type(author_obj.books))
    
        # author_obj.books.create(title='跟金老板学美容美发', publisher_id=1)
        # 1. 先创建书籍对象
        # 2. 创建author_obj和新建书籍对象的对应关系
    
        # shahe = models.Publisher.objects.first()
        #
        # shahe.books.create(title='跟金老板学烫头3')
        # author_obj.books.set([])
    
        book_obj = models.Book.objects.first()
        # author_obj.books.clear()
    
        pub_obj = models.Publisher.objects.first()
        pub_obj.books.clear()

    聚合和分组

    import os
    
    if __name__ == '__main__':
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day68_orm.settings")
        import django
    
        django.setup()
    
        from app01 import models
    
        from django.db.models import Avg, Sum, Max, Min, Count
    
        # ret = models.Book.objects.aggregate(Sum('price'),Count('id'),pingjun=Avg('price'),)
        # print(ret)
    
        # ret = models.Book.objects.annotate(Count('author'),).values()
        # for i in ret:
        #     print(i)
    
        # ret = models.Publisher.objects.annotate(min_price=Min('books__price')).values()
        # for i in ret:
        #     print(i)
    
        # ret = models.Book.objects.annotate(author_num=Count('author')).filter(author_num__gt=1)
        # for i in ret:
        #     print(i)
        #
        # ret = models.Book.objects.annotate(author_num=Count("author")).order_by("-author_num")
        # print(ret)
        #
    
        ret = models.Author.objects.annotate(Sum('books__price')).values()
        print(ret)

    F和Q

    import os
    
    if __name__ == '__main__':
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day68_orm.settings")
        import django
    
        django.setup()
    
        from app01 import models
        # ret = models.Book.objects.filter(id__gt=1)
        # print(ret)
    
        from django.db.models import F, Q
    
        # ret = models.Book.objects.filter(kucun__lt=F('sale'))
        # for i in ret:
        #     print(i.title,i.kucun,i.sale)
    
        # book_obj = models.Book.objects.get(id=1)
        # book_obj.title= '跟金老板学开潜艇'
        # book_obj.save()
    
        # models.Book.objects.all().update(kucun=F('kucun')* 10)
    
        from django.db.models.functions import Concat
        from django.db.models import Value
    
        # models.Book.objects.all().update(title=F('title')+'(第一版)')
    
        # models.Book.objects.all().update(title=Concat(F('title'),Value('(第一版)')))
    
        ret = models.Book.objects.filter(Q(id__lt=3) | Q(id__gt=5))
    
        ret = models.Book.objects.filter(~Q(id=3), id__lt=5)
    
        print(ret)

    事务

    import os
    
    if __name__ == '__main__':
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day68_orm.settings")
        import django
        django.setup()
    
        from app01 import models
    
        try:
            from django.db import transaction
            with transaction.atomic():
                models.Publisher.objects.create(name='沙河银行')
                models.Publisher.objects.get(id=100)
    
        except Exception as e:
            print(str(e))
  • 相关阅读:
    《大型网站技术架构》学习笔记——架构演化
    ASP.NET MVC之Html.RenderAction
    设计模式学习笔记——面向对象设计原则
    设计模式学习笔记——类图
    观察者模式
    泛型接口
    泛型的实例化应用
    多线程第二种方式-实现runnable
    对象中的某个属性不希望被序例化--transient
    对象序例化
  • 原文地址:https://www.cnblogs.com/benson321/p/9484415.html
Copyright © 2020-2023  润新知