Django ORM基础查询
基础的增删改查
# ---增---
# 方法一: register_time可以直接传时间格式的字符串,也可以传时间日期对象
models.User.objects.create(name='kwen',age=18,register_time='2020-11-10')
# 方法二:
import datetime
ctime = datetime.datetime.now()
user_obj = models.User(name='kwen',age=18,register_time=ctime)
user_obj.save()
# ---删---
'''
pk 主键 自动查找表的主键字段,不需要写明主键名(sid、uid……)
返回值:(1, {'app03.User': 1})
第一个1为影响的行数
'''
# 方法一
res = models.User.objects.filter(pk=2).delete()print(res)
# 方法二
user_obj = models.User.objects.filter(pk=2).first()user_obj.delete()
# --修改--
# 方法一
models.User.objects.filter(pk=3).update(name='lisa2')
# 方法二
user_obj = models.User.objects.filter(pk=3).first()
user_obj.name = 'lisa'user_obj.save()
常用查询方法
Model.objects.all() # 查询所有
Model.objects.filter() # 带有条件的过滤查询
Model.objects.get() # 获取某个数据对象
Model.objects.first() # 获取到当前查询列表的第一个
Model.objects.last() # 获取到当前查询列表的最后一个
#.values() # 获取指定数据字段 返回结果是列表套字典
models.User.objects.values('name','age').get(pk=3)
#.values_list() 返回结果是列表套元组
res = models.User.objects.values_list('name')
print(res)
#.distinct() # 去重 注意主键字段
obj = models.User.objects.values('name','age').distinct()
print(obj)
#.order_by() # 按某字段排序
obj = models.User.objects.order_by('-age')
print(obj)
#.reverse() # 反序(前提是有序)
obj = models.User.objects.order_by('-age').reverse()
print(obj)
#.exclude() # 排除某某在外,除了某某之外
obj = models.User.objects.exclude(name='lisa')
print(obj)
#.count() # 计数,统计
#.exists() # 是否存在
特殊查询 双下划线查询
# 用法:models.objects.filter(字段__gt=值)
__gt # 大于
models.objects.filter(字段__gt=值)
__lt # 小于
models.objects.filter(字段__lt=值)
__gte
models.objects.filter(字段__gte=值)
__lte
models.objects.filter(字段__lte=值)
__contains # 包含 模糊查询 区分大小写 忽略大小写 __icontains
models.objects.filter(字段__contains=值)
__in=[] # 或 查询age是12或31或45
models.objects.filter(age__in=[12,31,45])
__range=[] # 在x到x之间,包含两端 查询年龄在12~45之间的
models.objects.filter(age__range=[12,45])
__year __month __day # 按年|月|日 查询年份为2019年的
models.objects.filter(date__year='2019')