博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python-Django 模型层-单表查询
阅读量:6716 次
发布时间:2019-06-25

本文共 4756 字,大约阅读时间需要 15 分钟。

单表操作

-增加,删,改:两种方式:queryset对象的方法,book对象的方法

-改:需要用save()
-get()方法:查询的数据有且只有一条,如果多,少,都抛异常

单表查询

-<1> all(): 查询所有结果

<2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象
<3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
<4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象
<5> order_by(*field): 对查询结果排序('-id')
<6> reverse(): 对查询结果反向排序
<8> count(): 返回数据库中匹配查询(QuerySet)的对象数量。
<9> first(): 返回第一条记录
<10> last(): 返回最后一条记录
<11> exists(): 如果QuerySet包含数据,就返回True,否则返回False
<12> values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列
<13> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
<14> distinct(): 从返回结果中剔除重复纪录

单表基于双下划线的模糊查询

Book.objects.filter(price__in=[100,200,300])

Book.objects.filter(price__gt100)
Book.objects.filter(price__lt=100)
Book.objects.filter(price__gte=100)
Book.objects.filter(price__lte=100)
Book.objects.filter(price__range=[100,200])
Book.objects.filter(title__contains="python")
Book.objects.filter(title__icontains="python")
Book.objects.filter(title__startswith="py")
Book.objects.filter(pub_date__year=2012)
1 xx 12.3
2 xx 12.3
3 xxx 12.3

 

  
  import os   if __name__ == '__main__':     os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day81.settings")     import django     django.setup()     from app01 import models
  # 单表的增加两种    # date类型,传的时候,可以传字符串(格式必须是:2018-06-17),可以传时间对象    # ret=models.Book.objects.create(name='洪流吗',price=23.7,publish='北京出版社',pub_data='2018-06-17')    # import datetime    # ctime=datetime.datetime.now()    # ret=models.Book.objects.create(name='西游记',price=45.9,publish='南京出版社',pub_data=ctime)    # 生成对象,再调save方法    # book=models.Book(name='三国演义',price=46.89,publish='南京出版社',pub_data='2017-08-17')    # book.save()    # 删除(pk代指主键)    # ret=models.Book.objects.filter(pk=1).delete()    # book=models.Book.objects.filter(pk=1).first()    # book.delete()    #更新    # ret = models.Book.objects.filter(pk=2).update(name='ddd')    # book=models.Book.objects.filter(pk=2).first()    # book.name='XXX'    # # 没有update这个方法的    # # book.update()    # # 既可以保存,又可以更新    # book.save()    # get方法    # book = models.Book.objects.filter(pk=2).first()    # book拿到的是 book对象    # get查到的数据有且只有一条    # book=models.Book.objects.get(name='XXX')    # book=models.Book.objects.get(name='三国演义')    # print(book.name)    #     查询的api(方法)    # exclude(并列条件必须同时满足,也就是and)    # book=models.Book.objects.exclude(name='三国演义',price=44)    # # 必须是queryset对象才有query,它就是原生的sql    # print(book.query)    # 如何定义一个支持链式操作的类(每个方法返回的时候,返回对象本身)    # 按价格升序排列    # book=models.Book.objects.all().order_by('price')    # 倒序排列    # book = models.Book.objects.all().order_by('-price')    # print(book.query)    # # 必须有排序规则(在order_by之后用)才能调用reverse方法    # book = models.Book.objects.all().order_by('price').reverse()    # book = models.Book.objects.all().reverse()    # print(book.query)    # book=models.Book.objects.all().filter(name='偶露菲').count()    # book=models.Book.objects.all().count()    # book=models.Book.objects.all().first()    # print(book)    # book=models.Book.objects.all().last()    # queryset 可以按索引取值,但是不支持负索引    # 可以支持切片,其实sql就改了    # book = models.Book.objects.all()[10:15]    # book=models.Book.objects.all().filter(name='xx').exists()    # values :返回结果是queryset对象,里面套字典    # book=models.Book.objects.all().values('name')    # for i in book:    #     print(i.get('name'))    #     print(i['price'])    # values :返回结果是queryset对象,里面套元组    # book=models.Book.objects.all().values_list('name','price')    # book=models.Book.objects.all().values('price').distinct()    # 基于双下划线的模糊查询    # 在列表范围内    # book=models.Book.objects.filter(price__in=[44,45])    # print(book.query)    # 大于    # book = models.Book.objects.filter(price__gt=44)    # 大于等于    # book = models.Book.objects.filter(price__gte=44)    # 小于    # book = models.Book.objects.filter(price__lt=44)    # print(book)    # # 小于等于    # book = models.Book.objects.filter(price__lte=45)    # 在40--50之间    # book=models.Book.objects.filter(price__range=[40,50])    # print(book.query)    # 包含 python    # book = models.Book.objects.filter(name__contains='python')    # 不区分大小写的包含    # book = models.Book.objects.filter(name__icontains='python')    # print(book.query)    # 以XX开通    # book=models.Book.objects.filter(name__istartswith='X')    # print(book.query)    # print(book)    # book=models.Book.objects.filter(name__endswith='义')    # print(book.query)    # book=models.Book.objects.filter(pub_data__year='2017')    # book=models.Book.objects.filter(pub_data__month='01')    # book=models.Book.objects.filter(pub_data__day='11')    book=models.Book.objects.filter(pub_data__year='2017',pub_data__month='08')    print(book.query)    print(book)

  TTL

单表操作

-单表的增删改
-单表查询:
-基于双下划线的模糊查询

 

转载于:https://www.cnblogs.com/du-jun/p/10256149.html

你可能感兴趣的文章
ios版塔防类游戏源码
查看>>
Backup Exec 2010 V-79-57344-65072
查看>>
docker的学习
查看>>
我的友情链接
查看>>
记一次线上Java程序导致服务器CPU占用率过高的问题排除过程
查看>>
CentOS6、7 LVM逻辑卷分区自动扩容Shell脚本编程思路与实例
查看>>
Linux下sqlite3常用命令!!!
查看>>
mysqldump导出的数据导入时特别慢的问题解决
查看>>
我的友情链接
查看>>
在Kali中开启ssh
查看>>
Linux系统产生随机数的6种方法
查看>>
squid-3.x 修改源代码隐藏版本号.时间、主机名等信息
查看>>
SequoiaDB 笔记
查看>>
hadoop安装
查看>>
Ubuntu 用户名 不在 sudoers文件中,此事将被报告。
查看>>
lduan HyPer-V 网络存储(三)
查看>>
SSH 命令行参数详解【英】
查看>>
DNS服务器
查看>>
notify与notifyAll的区别
查看>>
Java读取文件方法大全
查看>>