zoukankan      html  css  js  c++  java
  • 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数据库才会有这个问题,其他数据库没有这个问题。
  • 相关阅读:
    Pascal's Triangle II
    Pascal's Triangle
    Best Time to Buy and Sell Stock II
    Best Time to Buy and Sell Stock
    Populating Next Right Pointers in Each Node
    path sum II
    Path Sum
    [转载]小波时频图
    [转载]小波时频图
    [转载]Hilbert变换及谱分析
  • 原文地址:https://www.cnblogs.com/ch2020/p/13084447.html
Copyright © 2011-2022 走看看