• ORM 关键


        1. 老师的增删改查
            1. teacher_obj.cid.add(*[1, 2, 3])   添加(必须打散)
            2. teacher_obj.cid.set([1, 2, 3])    设置(不用打散)
            
        2. 查询练习
            1. 单表查询  只在一张表里查各种字段
                obj.属性(字段)
            2. 一对多(外键)和一对一
                正向:
                    从写外键或一对一的表开始查 叫 正向查
                    obj.外键(一对一).属性
                反向查:
                    1. 一对多
                        obj.表名_set
                    2. 一对一
                        obj.表名        
            3. 多对多
            
                正向查:
                    从写多对多的表开始查 叫 正向查
                    obj.多对多字段名.all() --> QuerySet()
                反向查:
                    obj.表名_set.all()     --> QuerySet()
                            
            4. 双下划线 表示跨表查询
                正向:
                    1. 关联的字段名__另外一张表的字段名
                反向:
                    1. 另外一张表的表名__另外一张表的字段名
                    
            5. 聚合
                aggregate()
                
                from django.db.models import Avg, Max, Min, Count, Sum
                
                # 求最贵的那本书
                models.Book.objects.all().aggregate(max_price=Max("price"))
            
            6. 分组
            annotate()
            
                # 将所有的书按作者分组,统计每个作者最贵的书
                models.Author.objects.all().annotate(author_max=Max("books__price"))
                最后得到的是一个QuerySet()对象,里面的每个数据对象都多了一个author_max字段
            
            7. F 
                查询条件是字段间的比较
                
                查询所有购买数大于收藏数的商品
                models.Goods.objects.filter(buy_num__gt=F("keep_num"))
                
                扩展的两个:
                    1. 将每个商品的购买数+1000
                        models.Goods.objects.all().update(buy_num=F("buy_num")+1000)
                    2. 将所有商品的名字前面加上 “特价”
                        from django.db.models.functions import Concat
                        from django.db.models import Value
                        
                        models.Goods.objects.filter().update(name=Concat(Value("特价"), F("name")))
                        
            8. Q
                相当于取出子集和
                
                Q(条件1) | Q(条件2)
                Q(条件1) & Q(条件2)
                Q(条件1) & ~Q(条件2)    
                
                当Q查询和关键字查询都有的时候,Q查询要写在前面
                models.Book.objects.filter(Q(title__contains="物语")|Q(publish_day__year=2017),price__lt=9)
                    
            
            9. 常用字段
                
            10. 字段参数
                null
                max_length
                default
                unique
                primary_key
                
                时间字段相关:
                    auto_now_add  创建这条数据时自动加当前时间
                    auto_now      每一次修改都更新时间
                
                关系字段:
                    related_name
                    to
                    to_field
            
            11. 所有QuerySet方法
                
                1. select_realated(关系字段) 
                    一对一或多对一查询时用这个
                
                2. prefetch_realated()
                    多对多和一对多时用这个
    
                3. 批量创建
                
                    提前把数据对象生成,
                    data = [obj1, obj2, obj3]
                    bulk_create(data, 10)
                4. 执行额外SQL语句
                    Entry.objects.extra(select={'new_id': "select col from sometable where othercol > %s"}, select_params=(1,))
                    
                5. 直接执行原生SQL(和pymysql类似)
                    拿到连接,获取光标,执行SQL语句
                    from django.db import connection, connections
                    cursor = connection.cursor()  # cursor = connections['default'].cursor()
                    cursor.execute("""SELECT * from auth_user where id = %s""", [1])
                    row = cursor.fetchone()
  • 相关阅读:
    Vim深入研究
    信息安全系统设计基础第十三周学习总结——20135308
    信息安全系统设计基础实验五:通讯协议设计
    信息安全系统设计基础第十二周学习总结 ——20135308
    信息安全系统设计基础实验四:外设驱动程序设计
    信息安全系统设计基础实验三:实时系统的移植
    GDB深入研究——20135308芦畅
    信息安全系统设计基础第十一周学习总结——20135308
    第九次ScrumMeeting博客
    第八次ScrumMeeting博客
  • 原文地址:https://www.cnblogs.com/jassin-du/p/8352851.html
Copyright © 2020-2023  润新知