• django中对数据库的增删改查


    Django的配置文件时settings.py中的
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, 'templates')],  只修改这一个
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
    
    对数据库进行增 删 改 查
    在当前的文档的views.py中的
    class RegisterView(View):
        def get(self, request):
            1 增加
            book = BookInfo(
                btitle='天涯明月刀',
                bpub_date=date(1999, 12, 12),
                bread=30,
                bcomment=10
            )
            book.save()
    
            HeroInfo.objects.create(
                hname='叶开',
                hgender=0,
                hcomment='小李飞刀',
                hbook=book
            )
            2 查询
            try:
                基本查询
                查询所有的书名
                books = BookInfo.objects.all()
                print(books)
                book = BookInfo.objects.get(id=1)
                book = BookInfo.objects.get(pk=1)
                book = BookInfo.objects.get(id=100)
                print(book)
                print(BookInfo.objects.count())
    
                过滤查询
                相等
                print(BookInfo.objects.filter(id__exact=1))
                print(BookInfo.objects.filter(id=1))
    
                模糊查询
                print(BookInfo.objects.filter(btitle__contains=''))
                print(BookInfo.objects.filter(btitle__endswith=''))
                print(BookInfo.objects.filter(btitle__startswith=''))
                以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如iexact、icontains、istartswith、iendswith.
    
                空查询
                print(BookInfo.objects.filter(btitle__isnull=False))
                print(HeroInfo.objects.filter(hcomment__isnull=False))
    
                范围查询
                print(BookInfo.objects.filter(id__in=[1, 3, 5]))
                print(HeroInfo.objects.filter(id__in=[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]))
    
                比较查询
                print(BookInfo.objects.filter(id__gt=3))
                print(BookInfo.objects.exclude(id__gt=3))
    
                日期查询
                print(BookInfo.objects.filter(bpub_date__year=1980))
                print(BookInfo.objects.filter(bpub_date__gt=date(1990, 1, 1)))
    
                F 对象 之前的查询都是对象的属性与常量值比较,两个属性怎么比较呢? 答:使用F对象,被定义在django.db.models中。
                查询阅读量大于等于评论量的图书。
                print(BookInfo.objects.filter(bread__gte=F('bcomment')))
                查询阅读量大于等于评论量2倍的图书。
                print(BookInfo.objects.filter(bread__gte=F('bcomment')*2))
    
                Q 对象
                多个过滤器逐个调用表示逻辑与关系,同sql语句中where部分的and关键字。
                print(BookInfo.objects.filter(bread__gt=20,id__lt=3))
                print(BookInfo.objects.filter(bread__gt=20).filter(id__lt=3))
                如果需要实现逻辑或or的查询,需要使用Q()对象结合|运算符,Q对象被义在django.db.models中。
                查询阅读量大于20的图书,改写为Q对象如下。
                print(BookInfo.objects.filter(Q(bread__gt=20)))
                Q对象可以使用&、|连接,&表示逻辑与,|表示逻辑或。查询阅读量大于20,或编号小于3的图书,只能使用Q对象实现
                print(BookInfo.objects.filter(Q(bread__gt=20) | Q(pk__lt=3)))
                Q对象前可以使用~操作符,表示非not   查询编号不等于3的图书。
                print(BookInfo.objects.filter(~Q(pk=3)))
    
                聚合函数
                使用aggregate()过滤器调用聚合函数。聚合函数包括:
                Avg 平均,Count 数量,Max 最大,Min 最小,Sum 求和,被定义在django.db.models中。
                查询图书的总阅读量。
                print(BookInfo.objects.aggregate(Sum('bread')))
    
                排序
                使用order_by对结果进行排序
                print(BookInfo.objects.all().order_by('bread'))  # 升序
                print(BookInfo.objects.all().order_by('-bread'))  # 降序
    
                关联查询
                由一到多的访问语法:一对应的模型类对象.多对应的模型类名小写_set 例:
                print(BookInfo.objects.get(id=1).heroinfo_set.all())
                由多到一的访问语法:多对应的模型类对象.多对应的模型类中的关系类属性名 例:
                print(HeroInfo.objects.get(id=1).hbook)
                访问一对应的模型类关联对象的id语法:多对应的模型类对象.关联类属性_id
                print(HeroInfo.objects.get(id=1).hbook_id)
    
                关联过滤查询
                由多模型类条件查询一模型类数据:
                查询图书,要求图书英雄为"孙悟空"
                print(BookInfo.objects.filter(heroinfo__hname='孙悟空'))
                查询图书,要求图书中英雄的描述包含""
                print(BookInfo.objects.filter(heroinfo__hcomment__contains=''))
                由一模型类条件查询多模型类数据:
                查询书名为“天龙八部”的所有英雄。
                print(HeroInfo.objects.filter(hbook__btitle='天龙八部'))
                查询图书阅读量大于30的所有英雄
                print(HeroInfo.objects.filter(hbook__bread__gt=30))
    
                3 修改(修改更新有两种方法)
                save  修改模型类对象的属性,然后执行save()方法
                hero = HeroInfo.objects.get(hname='猪悟能')
                hero.hname='猪八戒'
                hero.save()
                hero = HeroInfo.objects.get(hname='孙悟空')
                hero.hname = '孙行者'
                hero.hcomment = '七十二变'
                hero.save()
                update  使用模型类.objects.filter().update(),会返回受影响的行数
                HeroInfo.objects.filter(hname='沙悟净').update(hname='沙和尚')
    
                4 删除(删除有两种方法)
                1)模型类对象delete
                HeroInfo.objects.get(id=13).delete()
                2)模型类.objects.filter().delete()
                HeroInfo.objects.filter(id=14).delete()
    
                查询集 QuerySet 查询集,也称查询结果集、QuerySet,
                表示从数据库中获取的对象集合。
                当调用如下过滤器方法时,Django会返回查询集
                (而不是简单的列表):all():返回所有数据。filter():返回满足条件的数据。
                exclude():返回满足条件之外的数据。order_by():对结果进行排序。
                对查询集可以再次调用过滤器进行过滤,如
                print(BookInfo.objects.filter(bread__gt=30).order_by('bpub_date'))
    
                测试自定义的管理器
                print(BookInfo.books.all())
    
                book = BookInfo.books.create_book('aabc', date(1988, 1, 1))
    
    
            except Exception as e:
                print("出错了")
    
            response = HttpResponse("register get page")
            return response
    
        def post(self, request):
            response = HttpResponse("register post page")
            return response
  • 相关阅读:
    Office Web Apps Server 2013与PDF(一)
    关于EF Unit of Work Repository的简单用法
    从3层开始
    使用ms owin 搭建oauth2 server
    让自己的程序支持livewriter
    angularjs 从外部改变controller内的数据
    vs2013 update 2 cordova(phonegap) 环境
    asp.net web api 跨域,带cookie
    c#与IronPython Clojure-clr的调用
    Mvc Moq HttpContext
  • 原文地址:https://www.cnblogs.com/marchpy/p/10371690.html
Copyright © 2020-2023  润新知