• 单表查询总结


    单表查询

    一、创建表

     """
        auto_now:每次修改数据的时候 都会自动更新时间
        auto_now_add:在创建数据的时候 会自动将当前时间记录下来
        后期如果你不认为修改的话 数据不变 
    """
    # Create your tests here.
        
    # settings.py 查看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',
            },
        }}
    
    # models.py
    class Book(models.Model):
        title = models.CharField(max_length=50)
        price = models.DecimalField(max_digits=8, decimal_places=2)
        publish_data = models.DateField()
    
        def __str__(self):
            return self.title
    
    # test.py
    if __name__ == '__main__':
        # 测试文件必须引用下面两句话才可以使用orm,和配置环境
         os.environ.setdefault("DJANGO_SETTINGS_MODULE", "one_search.settings")
        import django
        django.setup()
    

    二、增删改查

    
     # 1.1 增加数据 create方法
    res = models.Book.objects.create(title='金老板, price=222.222, publish_data='2019-10-24')
        
     # 1.2 增加数据 save方法
    book_obj = models.Book(title='武大郎', price=4444.44, publish_data='2019-8-8')
    book_obj.save()
    
    # 修改数据
    # 2.1 修改数据 update,满足条件全部修改
    models.Book.objects.filter(pk=1).update(price=999.66)
    
    
    # 2.2 修改数据 save方法(修改不推荐使用,效率低)
    book_obj = models.Book.objects.filter(pk=1).first()
    print(book_obj)  # Book object
    book_obj.title = '不符社会主义核心价值观'
    book_obj.save()
    print(book_obj.save())  # none
    
    
    # 3.删除数据 delete方法
    book_obj = models.Book.objects.filter(pk=3).delete()
    print(book_obj) # (1, {'app01.Book': 1})
    
    # 4  十三种查找方法
    
    # 方法一: all查询所有 返回QuerySet类表
    book_obj = models.Book.objects.all().first()
    print(book_obj) # Book object
    print(book_obj.title)
    print(book_obj.price)
    
    
    # 方法二: filter() 条件查询,可以多个条件,条件不存在不会报错 返回QuerySet类表
    # 只要是queryset对象就可以无限制的点queryset对象的方法,可以,queryset.filter().filter().filter()
    book_obj =models.Book.objects.filter(pk=1).first()
    print(book_obj) # Book object
    print(book_obj.title)
    print(book_obj.price)
    print(book_obj.publish_data)
    
    
    # 方法三: get() 条件查询,条件不成立则会报错  返回对象数据本身 
    book_obj = models.Book.objects.get(pk=1)
    print(book_obj)
    print(book_obj.title)
    print(book_obj.price)
    print(book_obj.publish_data)
    
     # 方法四:first() 获取查询列表中结果, 第一个
    book_obj = models.Book.objects.all()
    book_obj = book_obj.first()
    print(book_obj)
    print(book_obj.title)
    print(book_obj.price)
    print(book_obj.publish_data)
    
    # 方法5: last() 获取查询列表中结果,最后一个
    book_obj = models.Book.objects.all()
    book_obj = book_obj.last()
    print(book_obj)
    print(book_obj.title)
    print(book_obj.price)
    print(book_obj.publish_data)
    
    # 方法6:exclude 除此之外 返回 QuerySet
    book_obj = models.Book.objects.exclude(pk=2)
    print(book_obj)
    
    
    # 方法7:values 获取的是对应字段值,类表套字典 QuerySet,参数可以有多个
    book_obj = models.Book.objects.values('title', 'price')
    print(book_obj) # <QuerySet [{'title': '不符社会主义核心价值观'}, {'title': '武大郎'}]>
    
    
    # 方法8:values_list 获取的是对应字段值, 类表套元组 返回QuerySet()
    book_obj = models.Book.objects.values_list('title')
    print(book_obj)
    
    # 方法9:count() 统计表中数据的个数
    book_obj = models.Book.objects.count()
    print(book_obj, type(book_obj)) # 2 <class 'int'>
    
    # 方法10:distinct() 去重, 数据必须是一模一样的情况下才能去重
    book_obj = models.Book.objects.distinct()
    print(book_obj)
    res1 = models.Book.objects.values('title','price').distinct()
    print(res1)
    
    # 方法11: order_by() 排序, 默认是升序,加符号就是降序
    book_obj = models.Book.objects.order_by('price')
    print(book_obj)
    book_obj1 = models.Book.objects.order_by('-price')
    print(book_obj1)
    
    # 方法12:reverser() 前面必须是先把结果排序才可以反转
    book_obj = models.Book.objects.order_by('price').reverse()
    print(book_obj)
    
    
    # 方法13:exists() 判断是否存在 bool
    book_obj = models.Book.objects.filter(pk=1).exists()
    print(book_obj)
    
    
    

    三、神奇的双下划线查询

    特点:字段名__关键字

    #1. 查询价格大于200的书籍
    book_obj = models.Book.objects.filter(price__gt=200)
    print(book_obj)
    
    #2. 查询价格小于200的书籍
    book_obj = models.Book.objects.filter(price__lt=200)
    print(book_obj)
    
    # 3. 查询价格大于或者等于200的数据
    book_obj = models.Book.objects.filter(price__gte=200)
    print(book_obj)
    
    # 4. 查询价格大于或者等于200的数据
    book_obj = models.Book.objects.filter(price__lte=200)
    print(book_obj)
    
    
    # 5. 价格是200 或者是123.23 或者666.66, 注意精度问题
    book_obj = models.Book.objects.filter(price__in=[200, 999.66,123.23 ])
    print(book_obj)
    
    
    # 6. 价格在200 到 700之间的书籍
    book_obj = models.Book.objects.filter(price__range=(200, 1000))
    print(book_obj) # <QuerySet [<Book: 不符社会主义核心价值观>]>
    
    
    

    四、模糊匹配

    """
    like
         %
         _
    """
    
    # 1. 查询书籍名称中包含p的,区分大小写
    book_obj = models.Book.objects.filter(title__contains='p')
    print(book_obj)
        
    # 2. 查询书籍名称中包含p的,忽略大小写
    book_obj = models.Book.objects.filter(title__icontains='p')
    print(book_obj)
    
    # 3. 查询书籍名称是以三开头的书籍
    book_obj = models.Book.objects.filter(title__startswith='三')
    print(book_obj)
    
    # 4. 查询书籍名称是以P结尾的书籍
    book_obj = models.Book.objects.filter(title__endswith='P')
    print(book_obj)
    
    # 5. 查询出版日期是2019年的书籍
    book_obj = models.Book.objects.filter(publish_data__year='2019')
    print(book_obj)
    
    
    # 6. 查询出版日期是10月的书籍
    book_obj = models.Book.objects.filter(publish_data__month='10')
    print(book_obj)
    
    
    在当下的阶段,必将由程序员来主导,甚至比以往更甚。
  • 相关阅读:
    《Centos服务器版安装教程》
    从CentOS官网下载系统镜像详细教程
    一键LNMP文件
    Centos 7 ip地址
    cmd常用命令
    bat命令
    JAVA学习资源整理
    DevOps 高效 shell 命令
    编程范式:命令式编程(Imperative)、声明式编程(Declarative)和函数式编程(Functional)
    Java 中的函数式编程(Functional Programming):Lambda 初识
  • 原文地址:https://www.cnblogs.com/randysun/p/11747658.html
Copyright © 2020-2023  润新知