1、创建Django项目
#在app的models.py中写入: class User(models.Model): name = models.CharField(max_length=32) age = models.IntegerField() register_time = models.DateField()
2、单独的py文件测试ORM操作
#单独的py文件测试ORM操作需要先配置以下内容 import os if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day58.settings") import django django.setup() from app01 import models # 这一句话必须在最下面导入
3、测试ORM的python文件
import os if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day58.settings") import django django.setup() from app01 import models # 新增数据 # 基于create创建 user_obj = models.User.objects.create(name='tank',age=73,register_time='2019-2-14') print(user_obj.register_time) # 基于对象的绑定方法创建 user_obj = models.User(name='kevin',age=30,register_time='2019-1-1') user_obj.save() from datetime import datetime ctime = datetime.now() models.User.objects.create(name='egon', age=18, register_time=ctime) # 修改数据 # 基于对象 user_obj = models.User.objects.filter(name='jason').first() user_obj.age = 17 user_obj.save() # 基于queryset models.User.objects.filter(name='kevin').update(age=66) # 删除数据 # 基于queryset models.User.objects.filter(name='egon').delete() # 基于对象 user_obj = models.User.objects.filter(name='owen').first() user_obj.delete() # 查询数据 # < 1 > all(): 查询所有结果 # < 2 > filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 # filter内可以放多个限制条件但是需要注意的是多个条件之间是and关系 res = models.User.objects.filter(name='jason',age=17) print(res) # < 3 > get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。 # 不推荐使用 # < 4 > exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 res = models.User.objects.exclude(name='jason') print(res) # < 5 > order_by(*field): 对查询结果排序('-id') / ('price') res = models.User.objects.order_by('age') # 默认是升序 res = models.User.objects.order_by('-age') # 可以在排序的字段前面加一个减号就是降序 res = models.User.objects.order_by('name') res = models.User.objects.order_by('-name') print(res) # < 6 > reverse(): 对查询结果反向排序 >> > 前面要先有排序才能反向 res = models.User.objects.order_by('age').reverse() print(res) # < 7 > count(): 返回数据库中匹配查询(QuerySet) 的对象数量。 res = models.User.objects.count() res = models.User.objects.all().count() print(res) # < 8 > first(): 返回第一条记录 res = models.User.objects.all().first() res = models.User.objects.all()[0] # 不支持负数的索引取值 print(res) # < 9 > last(): 返回最后一条记录 res = models.User.objects.all().last() print(res) # < 10 > exists(): 如果QuerySet包含数据,就返回True,否则返回False res = models.User.objects.all().exists() res1 = models.User.objects.filter(name='jason',age=3).exists() print(res,res1) # < 11 > values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象, 而是一个可迭代的字典序列 res = models.User.objects.values('name') # 列表套字典 res = models.User.objects.values('name','age') # 列表套字典 print(res) # < 12 > values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列 res = models.User.objects.values_list('name','age') # 列表套元祖 print(res) # < 13 > distinct(): 从返回结果中剔除重复纪录 去重的对象必须是完全相同的数据才能去重 res = models.User.objects.values('name','age').distinct() print(res) # 神奇的双下划线查询 # 查询年龄大于44岁的用户 res = models.User.objects.filter(age__gt=44) print(res) # 查询年龄小于44岁的用户 res = models.User.objects.filter(age__lt=44) print(res) # 查询年龄大于等于44岁的用户 res = models.User.objects.filter(age__gte=44) print(res) # 查询年龄小于等于44岁的用户 res = models.User.objects.filter(age__lte=44) print(res) # 查询年龄是44或者22或者73的用户 res = models.User.objects.filter(age__in=[44,22,73]) print(res) # 查询年龄在22到44范围内 res = models.User.objects.filter(age__range=[22,44]) print(res) # 用的是mysql数据库 # 查询年份 res = models.Book.objects.filter(publish_date__year=2019) print(res) # 查询名字中包含字母n的用户 sqlite数据库演示不出来大小写的情况!!! res = models.Author.objects.filter(name__contains='n') res = models.Author.objects.filter(name__icontains='n') print(res) res = models.User.objects.filter(name__icontains='e') # 无视大小写 print(res) # 查询名字以j开头的用户 res = models.User.objects.filter(name__startswith='j') print(res) # 查询名字以n结尾的用户 res = models.User.objects.filter(name__endswith='n') print(res) # 查询注册是在2017年的用户 res = models.User.objects.filter(register_time__year=2017) # sqlite对日期格式不太精准 print(res)
4、13个必会操作总结
返回QuerySet对象的方法有:
all()
filter()
exclude()
order_by()
reverse()
distinct()
特殊的QuerySet:
values() 返回一个可迭代的字典序列
values_list() 返回一个可迭代的元祖序列
返回具体对象的:
get()
first()
last()
返回布尔值的方法有:
exists()
返回数字的方法有:
count()
5、只要是queryset对象就可以无限制的点queryset方法
models.User.objects.filter().filter().filter().count()