zoukankan      html  css  js  c++  java
  • 模型层之单表

    单表操作   数据:增,查,删,改

     增加记录

        # *********增*********
    
        # 第一种方式 注意时间格式 推荐第一种
        # import datetime
        # now = datetime.datetime.now()
        # book = Book.objects.create(name='红楼梦',price=10,pub_date='2018-01-01',author='xjj',publish='北京出版社')
        # Book.objects.create(name='西游记',price=20,pub_date=now,author='egon',publish='上海出版社')
        # 第二种方式
        # book1 = Book(name='水浒传',price=30,pub_date='2018-01-02',author='lqa',publish='广州出版社')
        # book1.save()
        #
        # print(now) #2018-09-07 20:35:21.296465
        # print(book) #Book object
        # print(book1) #Book object

     查找记录

        # *********查*********
    
        # filter(--queryset对象)相当于sql的where 后面传的参数,都是and
        # books = Book.objects.filter(name='红楼梦')
        # print(books)            #<QuerySet [<Book: Book object>]>
        # print(books.first())    #Book object
        # print(books.first().id) #1
        # print(books[0].id)      #1
    
        # all() 拿所有的--queryset对象
        # books = Book.objects.all()
        # print(books)  #<QuerySet [<Book: Book object>, <Book: Book object>, <Book: Book object>]>
    
        # first() 从queryset里取出第一个值---->book对象
        # books = Book.objects.all().first()
        # print(books)  #Book object
    
        # last()
        # books = Book.objects.all().last()
        # print(books) #Book object
        # Book.objects.all()[-1]  #报错
    
        # get只能用来查,返回一条数据的情况,多,少,都报错 用于属性是unique属性字段的
        # books = Book.objects.get(name='西游记')
        # print(books)  #Book object
    
        # values 对应到sql相当于 selet  这里的东西 from book---返回QuerySet对象
        # 一旦返回是queryset对象,可以继续点它的方法
        # book=Book.objects.all().values('name','price').filter(name='Pyhon开发').filter(id=4).values('id')
        # books = Book.objects.all().values('name','price').first()
        # print(books)  #{'name': '红楼梦', 'price': Decimal('10.00')}
    
        # values_list 对比values   values_list:queryset里放元组, values:queryset里放字典
        # books = Book.objects.all().values_list('name','price')
        # print(books) #<QuerySet [('红楼梦', Decimal('10.00')), ('西游记', Decimal('20.00')), ('水浒传', Decimal('30.00'))]>
    
        # exclude 除XX以外的
        # books = Book.objects.all().exclude(name='西游记')
        # print(books) #<QuerySet [<Book: Book object>, <Book: Book object>]>
    
        # order_by 默认从小到大,想从大到小-
        # books = Book.objects.all().order_by('price') #<QuerySet [<Book: Book object>, <Book: Book object>, <Book: Book object>]>
        # books = Book.objects.all().order_by('-price') #<QuerySet [<Book: Book object>, <Book: Book object>, <Book: Book object>]>
        # print(books)
    
        # count  返回数值---不能继续点了
        # count = Book.objects.all().count()
        # print(count) #3
    
        # exists 判断queryset里有没有数据,没有就是false,有就是true
        # res=Book.objects.all().exists()
        # print(res)  #True
    
        # distinct() 去重复
        # res = Book.objects.values('publish').distinct()
        # print(res) #<QuerySet [{'publish': '北京出版社'}, {'publish': '上海出版社'}, {'publish': '广州出版社'}]>
        # 这种无意义,因为每条记录对象都不同 最起码id不同
        # res = Book.objects.all().distinct()
        # print(res) #<QuerySet [<Book: Book object>, <Book: Book object>, <Book: Book object>]>
    
        # reverse 对查询结果反向排序 只能和order_by连用
        # books = Book.objects.all().order_by('-price').reverse() #<QuerySet [<Book: Book object>, <Book: Book object>, <Book: Book object>]>
        # 相当于
        # books = Book.objects.all().order_by('price') #<QuerySet [<Book: Book object>, <Book: Book object>, <Book: Book object>]>
        # books = Book.objects.all().order_by('-price','pub_date').reverse()
        # 相当于
        # books = Book.objects.all().order_by('price','-pub_date')
        # print(books)
    
        return HttpResponse('ok')
    
    '''
    <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():            从返回结果中剔除重复纪录
    
    补充:链式调用,定义类返回自己
    '''

    基于双下划线的模糊查询
    #基于双下划线的模糊查询 
    #类比sql原生的like
    
    # 不连续范围
    Book.objects.filter(price__in=[100,200,300])
    # 连续范围
    Book.objects.filter(price__range=[100,200])
    
    # 大于等于和小于等于
    Book.objects.filter(price__gt=100)
    Book.objects.filter(price__lt=100)
    Book.objects.filter(price__gte=100)
    Book.objects.filter(price__lte=100)
    
    # 包含xx    icontains不区分大小写
    Book.objects.filter(title__contains="python")
    Book.objects.filter(title__icontains="python")
    
    # 以xx开头  以xx结尾
    Book.objects.filter(title__startswith="py")
    Book.objects.filter(title__endswith="py")
    
    # 把日期截断取值比较
    Book.objects.filter(pub_date__year__gt=2012)
    Book.objects.filter(pub_date__month=12)
    Book.objects.filter(pub_date__day=12)
    
    补充:大于等于并且小于等于
    #     ret1=Book.objects.filter(price__range=[1,100])
    #     ret2 = Book.objects.filter(price__gte=1,price__lte=100)

    更新数据 update()

    # 更新 修改表记录 update()
    # 更新 返回结果是int类型,只能queryset对象来调,对象不能来调
    
    # ret=Book.objects.all().filter(price=51) # ret=Book.objects.all().filter(price=51).update(name='后楼梦') 可以 # ret=Book.objects.all().filter(price=51).first() 不行 # ret.update(name='水浒传') # print(ret)

    删除数据 delete()

    # 删除 生产环境一般不删除
    # 对象和queryset 都可以删除 返回值也一样

    # ret=Book.objects.filter(name='水浒传').delete() # ret=Book.objects.filter(name='红楼梦').first().delete() # (1, {'app01.Book': 1}) 1 影响一条记录 那个表的记录 1 影响这个表的记录 # print(ret) # 这不可以 manager对象 # ret=Book.objects.delete() # 这个可以 # ret=Book.objects.all().delete()

    django终端打印sql语句

    settings中追加即可

    ps:print(ret.query)  queryset对象的query方法,也可以打印原生sql


    LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level':'DEBUG', }, } }

    python脚本中调用django环境

    views中设置

    一般模式:浏览器请求,查看服务端

    改进版:直接右键运行,学习阶段使用,以后不会使用,了解


    # 这样就不用启动django了,在浏览器访问,在看打印内容
    # 直接右键运行即可,单表,多表操作快一些

    import os
    if __name__ == '__main__':
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djangotest08.settings") #settings中复制过来
    import django #导入django
    django.setup() #启动django

    # from app01 import models #导入模型
    from app01.models import * #导入模型


    # books = models.Book.objects.all() #sql语句部分
    # print(books)


    练习:

        # 查询老男孩出版社出版过的价格大于200的书籍
        # 查询2017年8月出版的所有以py开头的书籍名称
        # 查询价格为50, 100或者150的所有书籍名称及其出版社名称
        # 查询价格在100到200之间的所有书籍名称及其价格
        # 查询所有人民出版社出版的书籍的价格(从高到低排序,去重)
    
        ret = Book.objects.filter(publish='老男孩出版社',price__gt=200)
        ret = Book.objects.filter(price__contains='2017-08',name__startswith='py')
        ret = Book.objects.filter(price__in=[50,100,150]).values('name','publish')
        ret = Book.objects.filter(price__range=[100,200]).values('name','price')
        ret = Book.objects.filter(publish='人民出版社').values('price').order_by('price').reverse().distinct()
  • 相关阅读:
    机器学习十讲----第五讲
    Python数据挖掘学习进度06(numpy基本操作2、数组间运算)
    深度学习进度02(图和tensorboard、op、会话、张量)
    机器学习十讲----第四讲
    机器学习十讲----第三讲
    机器学习十讲----第二讲
    元胞自动机
    RuntimeError: The Session graph is empty. Add operations to the graph before calling run().解决方法
    Python数据挖掘学习进度05(numpy基本操作)
    深度学习进度01(深度和机器的区别、tensorflow的使用-tf数据流图)
  • 原文地址:https://www.cnblogs.com/xujinjin18/p/9607222.html
Copyright © 2011-2022 走看看