zoukankan      html  css  js  c++  java
  • ORM一般操作

    ORM一般操作
    1. 必知必会13条
    1. 返回QuerySet对象的
    1. all()
    2. filter()
    3. values()
    4. values_list()
    5. exclude()
    6. order_by()
    7. reverse()
    8. distinct()
    2. 返回具体对象的
    1. get()
    2. first()
    3. last()
    3. 返回布尔值的
    1. exists()
    4. 返回具体数值的
    1. count()
    2. 单表查询的双下划线
    1. models.Book.objects.filter(id__gt=1)
    2. models.Book.objects.filter(id__in=[1,2,3])
    3. models.Book.objects.filter(id__range=[1,5])
    4. models.Book.objects.filter(title__contains="沙河")
    5. models.Book.objects.filter(title__icontains="沙河")
    6. models.Book.objects.filter(title__startswith="沙河")
    7. models.Book.objects.filter(title__endswith="沙河")
    8. models.Book.objects.filter(publish_date__year=2017)
    9. models.Book.objects.filter(publish_date__month=2)
    3. 外键的跨表查询
    1. 正向查找
    1. 基于对象
    book_obj = models.Book.object.get(id=1)
    book_obj.publisher.name

    2. 基于双下划线的
    models.Book.object.filter(id=1).values("publisher__name")

    2. 反向查找(由出版社查书)
    1. 基于对象
    publisher_obj = models.Publisher.objects.get(id=1)
    默认反向查找的时候是表名加_set
    publisher_obj.book_set.all()
    如果在外键中设置了related_name="books"
    publisher_obj.books.all()

    2. 基于双下划线
    models.Publisher.objects.filter(id=1).values("book__title")
    如果配置了related_query_name="books"
    models.Publisher.objects.filter(id=1).values("books__title")

    4. 分组和聚合
    1. 聚合
    from django.db.models import Avg, Sum, Max, Min, Count
    models.Book.objects.all().aggregate(Avg("price"))
    2. 分组
    book_list = models.Book.objects.all().annotate(author_num=Count("author"))

    5. F和Q
    1. 当需要字段和字段作比较的时候用F查询
    2. 当查询条件是 或 的时候 用Q查询,因为默认的filter参数都是且的关系

    6. 事务
    1. 保证数据的原子性操作!!!

    def test(request):
    # 创建数据
    # models.UserType.objects.create(title='普通用户')
    # models.UserType.objects.create(title='二逼用户')
    # models.UserType.objects.create(title='牛逼用户')

    # models.UserInfo.objects.create(name='方少伟',age=18,ut_id=1)
    # models.UserInfo.objects.create(name='由秦兵',age=18,ut_id=2)
    # models.UserInfo.objects.create(name='刘庚',age=18,ut_id=2)
    # models.UserInfo.objects.create(name='陈涛',age=18,ut_id=3)
    # models.UserInfo.objects.create(name='王者',age=18,ut_id=3)
    # models.UserInfo.objects.create(name='杨涵',age=18,ut_id=1)

    # 获取
    # QuerySet[obj,obj,obj]
    # result = models.UserInfo.objects.all()
    # for obj in result:
    # print(obj.name,obj.age,obj.ut_id,obj.ut.title)

    # UserInfo,ut是FK字段 - 正向操作 PS: 一个用户只有一个用户类型
    # obj = models.UserInfo.objects.all().first()
    # print(obj.name,obj.age,obj.ut.title)

    # UserType, 表名小写_set.all() - 反向操作 PS: 一个用户类型下可以有很多用户
    # obj = models.UserType.objects.all().first()
    # print('用户类型',obj.id,obj.title)
    # for row in obj.userinfo_set.all():
    # print(row.name,row.age)

    # result = models.UserType.objects.all()
    # for item in result:
    # print(item.title,item.userinfo_set.filter(name='xx'))

    # obj
    # [obj,obj,]

    # result = models.UserInfo.objects.all().values('id','name')
    # QuerySet[{'id':'xx','name':'xx'} ]
    # for row in result:
    # print(row)

    # result = models.UserInfo.objects.all().values_list('id','name')
    # QuerySet[(1,'f'), ]
    # for row in result:
    # print(row)

    # 数据获取多个数据时
    # 1. [obj,obj,obj,]
    # models.UserInfo.objects.all()
    # models.UserInfo.objects.filter(id__gt=1)
    # result = models.UserInfo.objects.all()
    # for item in result:
    # print(item.name,item.ut.title)

    # 2. [{id:1,name:fd},{id:1,name:fd},{id:1,name:fd},]
    # models.UserInfo.objects.all().values('id','name')
    # models.UserInfo.objects.filter(id__gt=1).values('id','name')
    # 无法跨表
    # result = models.UserInfo.objects.all().values('id','name')
    # for item in result:
    # print(item['id'],item['name'])
    # 夸表 __
    # result = models.UserInfo.objects.all().values('id','name',"ut__title")
    # for item in result:
    # print(item['id'],item['name'],item['ut__title'])


    # 3. [(1,df),(2,'df')]
    # models.UserInfo.objects.all().values_list('id','name')
    # models.UserInfo.objects.filter(id__gt=1).values_list('id','name')
    # 无法跨表
    # result = models.UserInfo.objects.all().values_list('id','name')
    # for item in result:
    # print(item[0],item[1])
    # 夸表 __
    # result = models.UserInfo.objects.all().values_list('id','name',"ut__title")
    # for item in result:
    # print(item[0],item[1],item[2])

  • 相关阅读:
    C# 串口调试助手源码
    C# 中 textBox 侧面滑条 属性
    C# 中 comboBox 禁止输入
    VS2015 下载 破解
    中国移动OnetNet云平台 GET指令使用
    JSON JsonArray和JsonObject学习资料
    sublime 添加 ConvertToUTF-8
    sublime 添加 颜色插件 colorcoder
    线程池
    爬虫中基本的多线程
  • 原文地址:https://www.cnblogs.com/duhong0520/p/11384462.html
Copyright © 2011-2022 走看看