django中对数据库的增删改查
Posted marchpy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于django中对数据库的增删改查的主要内容,如果未能解决你的问题,请参考以下文章