• orm 表单操作


     1 创建记录方式1
     2     student_obj = models.Student(
     3         name='dazhaung',
     4         age=23,
     5     )
     6     student_obj.save()
     7 创建记录方式2
     8     new_obj = models.Student.objects.create(name='xiaozhuang2',age=6) #写成 **{'name':'xx'}
     9     print(new_obj)  #Student object --  model对象
    10     print(new_obj.name)  #点属性,可以获取对应字段的数据
    11     print(new_obj.age)
    12 
    13 创建方式3 批量创建
    14     objs_list = []
    15     for i in range(100,3000000):
    16         obj = models.Student(
    17             name='xiangxixxx',
    18             age = 10,
    19         )
    20         objs_list.append(obj)
    21 
    22     models.Student.objects.bulk_create(objs_list)
    23 
    24 创建方法4 update_or_create 有就更新,没有就创建
    25     models.Student.objects.update_or_create(
    26         name='红旭妹妹2',
    27         defaults={
    28             'age':38,
    29         }
    30     )
    31 
    32 添加日期数据
    33     import datetime
    34     current_date = datetime.datetime.now()
    35     # print(current_date) #2019-07-19 12:19:26.385654
    36     # 两种方式
    37     # models.Brithday.objects.create(name='B哥',date=current_date)
    38     # models.Brithday.objects.create(name='得港10',date='2000-12-08')

    删:

    1  删除  delete  queryset 和model对象都可以调用
    2     models.Student.objects.get(id=3).delete()  #model对象来调用的delete方法
    3     models.Student.objects.filter(name='红旭妹妹').delete() #
    4     models.Student.objects.all().delete() #删除所有

    1 更新 update方法 model对象不能调用更新方法 报错信息'Student' object has no attribute 'update'
    2     只能queryset调用,如果
    3     models.Student.objects.get(name='红旭妹妹').update(age=38)
    4     models.Student.objects.filter(name='红旭妹妹').update(age=38)

    简单查

     1 查询所有的数据  .all方法 返回的是queryset集合
     2     all_objs = models.Student.objects.all()
     3     #<QuerySet [<Student: Student object>, <Student: Student object>, <Student: Student object>]> -- 类似于列表  --  queryset集合
     4     # for i in all_objs:
     5     #     print(i.name)
     6     print(all_objs)
     7 
     8 条件查询  .filter方法,返回的也是queryset集合,查询不到内容,不会 报错,返回一个<QuerySet []>空的queryset
     9     objs = models.Student.objects.filter(id=2)  #找id为2的那条记录
    10     print(objs) #<QuerySet [<Student: xiaozhuang>]>
    11     objs = models.Student.objects.filter(name='dazhaung')
    12     print(objs) #<QuerySet [<Student: dazhaung>]>
    13 
    14 条件查询 get方法,返回的是model对象,而且get方法有且必须只有1个结果
    15     obj = models.Student.objects.get(id=3)  #找id为3的那条记录
    16     print(obj)  #xiaozhuang2

    查询接口

     1 <1> all():                  查询所有结果,结果是queryset类型
     2   
     3 <2> filter(**kwargs):       它包含了与所给筛选条件相匹配的对象,结果也是queryset类型 Book.objects.filter(title='linux',price=100) #里面的多个条件用逗号分开,并且这几个条件必须都成立,是and的关系,or关系的我们后面再学,直接在这里写是搞不定or的
     4     models.Student.objects.filter(id=7,name='大壮哥哥',age=78).update(
     5         name='大壮禅师',
     6         age=78
     7     )
     8     #打伞形式传参
     9     models.Student.objects.filter(**{'id':7,'name':'大壮禅师'}).update(age=100)
    10       models.Student.objects.all().filter(id=7)  queryset类型可以调用fitler在过滤
    11   
    12 <3> get(**kwargs):          返回与所给筛选条件相匹配的对象,不是queryset类型,是行记录对象,返回结果有且只有一个,
    13                             如果符合筛选条件的对象超过一个或者没有都会抛出错误。捕获异常try。  Book.objects.get(id=1)
    14   
    15 <4> exclude(**kwargs):      排除的意思,它包含了与所给筛选条件不匹配的对象,没有不等于的操作昂,用这个exclude,返回值是queryset类型 Book.objects.exclude(id=6),返回id不等于6的所有的对象,或者在queryset基础上调用,Book.objects.all().exclude(id=6)
    16     # exclude(**kwargs): 排除,objects控制器和queryset集合都可以调用,返回结果是queryset类型
    17     # query = models.Student.objects.exclude(id=1)
    18     # print(query)
    19     # query = models.Student.objects.filter(age=38).exclude(id=6)
    20     # print(query)
    21                  
    22 <5> order_by(*field):       queryset类型的数据来调用,对查询结果排序,默认是按照id来升序排列的,返回值还是queryset类型
    23                   models.Book.objects.all().order_by('price','id') #直接写price,默认是按照price升序排列,按照字段降序排列,就写个负号就行了order_by('-price'),order_by('price','id')是多条件排序,按照price进行升序,price相同的数据,按照id进行升序
    24         
    25         
    26 <6> reverse():              queryset类型的数据来调用,对查询结果反向排序,返回值还是queryset类型
    27             # 排序之后反转
    28               # query = models.Student.objects.all().order_by('id').reverse()
    29             # print(query)
    30 
    31 <7> count():                queryset类型的数据来调用,返回数据库中匹配查询(QuerySet)的对象数量。
    32   
    33 <8> first():                queryset类型的数据来调用,返回第一条记录 Book.objects.all()[0] = Book.objects.all().first(),得到的都是model对象,不是queryset
    34   
    35 <9> last():                queryset类型的数据来调用,返回最后一条记录,结果为model对象类型
    36   
    37 <10> exists():              queryset类型的数据来调用,如果QuerySet包含数据,就返回True,否则返回False
    38                    空的queryset类型数据也有布尔值True和False,但是一般不用它来判断数据库里面是不是有数据,如果有大量的数据,你用它来判断,那么就需要查询出所有的数据,效率太差了,用count或者exits
    39                  例:all_books = models.Book.objects.all().exists() #翻译成的sql是SELECT (1) AS `a` FROM `app01_book` LIMIT 1,就是通过limit 1,取一条来看看是不是有数据
    40 
    41 <11> values(*field):        用的比较多,queryset类型的数据来调用,返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列
    42                             model的实例化对象,而是一个可迭代的字典序列,只要是返回的queryset类型,就可以继续链式调用queryset类型的其他的查找方法,其他方法也是一样的。
    43 <12> values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
    44  
    45 <13> distinct():            values和values_list得到的queryset类型的数据来调用,从返回结果中剔除重复纪录,结果还是queryset
    46     query = models.Student.objects.all().values('age').distinct()
    47     print(query)
    48     

    基于双下划线的模糊查询

     1 Book.objects.filter(price__in=[100,200,300]) #price值等于这三个里面的任意一个的对象
     2 Book.objects.filter(price__gt=100)  #大于,大于等于是price__gte=100,别写price>100,这种参数不支持
     3 Book.objects.filter(price__lt=100)
     4 Book.objects.filter(price__range=[100,200])  #sql的between and,大于等于100,小于等于200
     5 Book.objects.filter(title__contains="python")  #title值中包含python的
     6 Book.objects.filter(title__icontains="python") #不区分大小写
     7 Book.objects.filter(title__startswith="py") #以什么开头,istartswith  不区分大小写
     8 Book.objects.filter(pub_date__year=2012)
     9 
    10 # all_books = models.Book.objects.filter(pub_date__year=2012) #找2012年的所有书籍
    11     # all_books = models.Book.objects.filter(pub_date__year__gt=2012)#找大于2012年的所有书籍
    12     all_books = models.Book.objects.filter(pub_date__year=2019,pub_date__month=2)#找2019年月份的所有书籍,如果明明有结果,你却查不出结果,是因为mysql数据库的时区和咱们django的时区不同导致的,了解一下就行了,你需要做的就是将django中的settings配置文件里面的USE_TZ = True改为False,就可以查到结果了,以后这个值就改为False,而且就是因为咱们用的mysql数据库才会有这个问题,其他数据库没有这个问题。
  • 相关阅读:
    POJ 3468 A Simple Problem with Integers(线段树区间求和)
    windows+Ubuntu双系统 windows引导修复
    CSDN博文大赛火爆开启
    TNS-12541,TNS-12560,TNS-00511,TNS-12542,TNS-12560,TNS-00512数据库启动监听报错
    MResource
    【LeetCode】【Python】Linked List Cycle
    中间件解析FDMEMTABLE.delta生成SQL的方法
    TDSTCPServerTransport 的Filters
    DATASNAP压缩过滤器的使用
    咏南CS插件开发框架也可BS方式部署
  • 原文地址:https://www.cnblogs.com/ch2020/p/13084447.html
Copyright © 2020-2023  润新知