单表查询总结

单表查询

一、创建表

 """
    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)

posted @ 2019-10-27 15:16  RandySun  阅读(243)  评论(1编辑  收藏  举报