准备工作 (创表)

models.py
以下操作为创建一个表 名称为 应用名称_info (testdb_info)

  1. class info(models.Model):
  2. name = models.CharField(max_length=16)
  3. age = models.IntegerField(default=1)

django不会自动触发model.py创建表 需要执行以下命令

  1. python manage.py makemigrations
  2. python manage.py migrate

django会自动将orm语句转为创表语句在数据库中执行
创表语句如下:

  1. CREATE TABLE `testdb_info` (
  2. `id` bigint NOT NULL AUTO_INCREMENT, -- id 自增
  3. `name` varchar(16) NOT NULL, -- name vachan类型 长度16
  4. `age` int NOT NULL, -- age int类型
  5. PRIMARY KEY (`id`)

  1. # 创建方式一
  2. # obj = models.info(
  3. # name='zhangsan',
  4. # age=100
  5. # )
  6. # obj.save()
  7. # 创建方式二
  8. # obj = models.info.objects.create(name='lisi',age='50')
  9. # 创建方式三 批量创建
  10. # obj_list = []
  11. # for i in range(1,5):
  12. # obj = models.info(
  13. # name='%s号' %i,
  14. # age= 20 + i
  15. # )
  16. # obj_list.append(obj)
  17. # models.info.objects.bulk_create(obj_list)
  18. # 创建方式四 创建或更新 update_or_create 有更新没有创建
  19. # id=1 有这个值进行更新 sql: update testdb_info set age = '30' where id = 1;
  20. # models.info.objects.update_or_create(
  21. # id=1, # 查询的条件
  22. # defaults={
  23. # 'age':30 # 更改的值
  24. # }
  25. # )
  26. # wangwu这个用户没有 所以会在数据库创建一条数据
  27. # models.info.objects.update_or_create(
  28. # name='wangwu',
  29. # defaults={
  30. # 'age': 21
  31. # }
  32. # )

  1. # 删除 queryset 和 model都可以调用
  2. # models.info.objects.filter(id=9).delete()
  3. # models.info.objects.get(id=8).delete()

  1. # 改 不能调用model方法 只能调用queryset
  2. # models.info.objects.filter(name='1号').update(age=300)
  3. # models.info.objects.get(name='2号').update(age=30) get获取到的是model 所以会报错
  4. # obj = models.info.objects.get(id=1)
  5. # obj.age = 10
  6. # obj.save()

  1. # 查 入门级
  2. # 查询所有数据 返回的是queryset 集合
  3. # all_obj = models.info.objects.all()
  4. # all = all_obj.values() # 对象套列表套字典
  5. # <QuerySet [{'id': 1, 'name': 'zhangsan', 'age': 30}, {'id': 2, 'name': 'zhangsan', 'age': 100}, {'id': 3, 'name': 'lisi', 'age': 50}, {'id': 4, 'name': 'lisi', 'age': 50}, {'id': 5, 'name': '1号', 'age': 300}, {'id': 6, 'name': '2号', 'age': 22}, {'id': 7, 'name': '3号', 'age': 23}]>
  6. # for i in all:
  7. # print(i)
  8. # 结果集
  9. # {'id': 1, 'name': 'zhangsan', 'age': 30}
  10. # {'id': 2, 'name': 'zhangsan', 'age': 100}
  11. # {'id': 3, 'name': 'lisi', 'age': 50}
  12. # {'id': 4, 'name': 'lisi', 'age': 50}
  13. # {'id': 5, 'name': '1号', 'age': 300}
  14. # {'id': 6, 'name': '2号', 'age': 22}
  15. # {'id': 7, 'name': '3号', 'age': 23}
  16. # 条件查询 filter 查询返回的值 为空也不会报错,可以返回多个
  17. # obj = models.info.objects.filter(id=1)
  18. # print(obj)
  19. # 条件查询 get 查询返回的值必须是1个 返回多个或者为空都会报错
  20. # obj = models.info.objects.get(id=1)
  21. # print(obj.values()[0]) # id获取的结果是一个 所以可以直接把第一个下标取出来
  22. # 查询所有数据 返回的是queryset 集合
  23. # all_obj = models.info.objects.all().first() # 取第一条
  24. # all_obj = models.info.objects.all().last() # 取最后一条
  25. # obj = models.info.objects.values('name').distinct() # 去重 <QuerySet [{'name': 'zhangsan'}, {'name': 'lisi'}, {'name': '1号'}, {'name': '2号'}, {'name': '3号'}]>
  26. # obj = models.info.objects.values('name') # 没去重 <QuerySet [{'name': 'zhangsan'}, {'name': 'zhangsan'}, {'name': 'lisi'}, {'name': 'lisi'}, {'name': '1号'}, {'name': '2号'}, {'name': '3号'}]>
  27. # obj = models.info.objects.all().count() # 获取次数
  28. # obj = models.info.objects.filter(id__gt=1) # id大于1的值
  29. # obj = models.info.objects.filter(id__gte=1) # id大于等于1
  30. # obj = models.info.objects.filter(id__lt=5) # id小于
  31. # obj = models.info.objects.filter(id__lte=5) # id小于等于
  32. # obj = models.info.objects.filter(id__lte=5,id__gt=1) # 小于等于5 大于1
  33. # obj = models.info.objects.filter(name__startswith='li') # 以li开头
  34. # like
  35. # obj = models.info.objects.filter(name__contains='号')
  36. # in
  37. # obj = models.info.objects.filter(id__in=[1, 3, 5]) # 取 id为 1,3,5的数据·
  38. # obj = models.info.objects.exclude(id__in=[1, 3, 5]) # 取id不为 1,3,5的数据
  39. # order by
  40. # obj = models.info.objects.filter(name='zhangsan').order_by('id') # asc 升序
  41. # obj = models.info.objects.filter(name='zhangsan').order_by('-id') # asc 降序
  42. # range
  43. # obj = models.info.objects.filter(id__range=[1, 2]) # between and
  44. # group by
  45. # from django.db.models import Count , Min , Max, Sum
  46. # obj = models.info.objects.filter(name='zhangsan').values('id').annotate(c=Count('id'))
  47. # SELECT "info"."name", COUNT("info"."id") AS "c" FROM "info" WHERE "info"."name" = 'zhangsan' GROUP BY "info"."id"
  48. # print(obj)
  49. # 返回布尔值 True False
  50. # obj = models.info.objects.filter(id=1).exists()
  51. # 返回一个查询集合 [(列表套元组)]
  52. # obj = models.info.objects.all().values_list()