Djiango-ORM操作

一般操作

  1.ORM常用字段和属性

            1. AutoField(primary_key=True)
            2. CharField(max_length=32)
            3. IntgerField()
            4. DateField()
            5. DateTimeField()

                1. auto_now_add    --> 创建的时候自动填充当前时间
                2. auto_now        --> 每次修改的时候自动把当前时间更新

        2. 关系字段

            1. ForeignKey(to="类名",related_name=“xx”)   --> 1对多  ,外键通常设置在多的那一边、
            2. ManyToMany(to="类名",related_name="xx")    --> 多对多,通常设置在正向查询多的那一边
            

        3. 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. 保证数据的原子性操作!!!
            
            7. 执行原生的SQL语句(了解即可)

猜你喜欢

转载自www.cnblogs.com/Iseeks/p/10202397.html