models -- 单表

  示例表:

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=30)
    age = models.IntegerField(blank=True, null=True)
    def __str__(self):
        return self.name

 

单表的增删改查 crud

    • 增加数据
      • #方法一    
            Author.objects.create(name='Li')
        
        #方法二
            Author.objects.create(**{"name": "Zhang"})
        
        #方法三
            obj = Author(name='xiaoming')
            obj.save()
        
        #方法四
            obj = Author()
            obj.name = 'Wang'
            obj.save()
        
    • 删除数据
      • Author.objects.filter(id=1).delete()
        
    • 修改数据

      • #方法一
            Author.objects.filter(id=3).update(name='xiaodong')
        
        #方法二
            obj = Author.objects.get(id=3)
            obj.name = 'xiaoze'
            obj.save()
        

         注:方法二不能使用update方法的原因:update是QuerySet对象的方法,get返回的是一个model对象,它没有update方法,而 filter返回的是一个QuerySet对象。get只能做单行数据的查询,如果查询到的结果是多行的,则会报错

    • 查询数据 -- all和filter查询返回的都是queryset , queryset是一个有序的列表,列表中的元素是model对象
      • all()
        • Author.objects.all()
        • 取所有的数据行
        • 返回 [<Author: xiaoze>, <Author: Li>, <Author: xiaoming>, <Author: xiaoming>]

           

      • get(**kwargs)
        • Author.objects.get(id=3)
        • 取id=3的数据行
        • 返回model对象,由于Author类有__str__方法,所以返回xiaoming
        • 查询的结果必须是单行数据  

           

      • filter(**kwargs)
        • Author.objects.filter(name='xiaoming')   
        • 取name='xiaoming'的所有数据行
        • 返回 [<Author: xiaoming>, <Author: xiaoming>]

 

        • Author.objects.filter(name='xiaoming')[0] 
        • 取第一行数据
        • 返回 model对象,由于Author类有__str__方法,所以返回xiaoming

           

        • Author.objects.filter(name='xiaoming', id='6')
        • 逗号分隔,表示and,取name='xiaoming'并且id='6'的数据行
        • 返回[<Author: xiaoming>]

 

      • values(*field)
        • Author.objects.filter(name='xiaoming').values('age', 'name')
        • 查询name='xiaoming'的数据行,并只展示age和name字段
        • 返回 [{'age': 20, 'name': 'xiaoming'}, {'age': 30, 'name': 'xiaoming'}] 

 

      • values_list(*field)
        • Author.objects.filter(name='xiaoming').values_list('age', 'name')
        • 查询name='xiaoming'的数据行,并只展示age和name字段
        • 返回 [(20, 'xiaoming'), (30, 'xiaoming')] 

 

      • exclude(**kwargs)
        • Author.objects.filter(name='xiaoming').exclude(age=30)
        • 查询name='xiaoming',并且age不为30的数据行
        • 返回 [<Author: xiaoming>] 

           

        • Author.objects.exclude(name='xiaoming')
        • 查询name不为xiaoming的数据行
        • 返回 [<Author: xiaoze>, <Author: Li>]

           

      • order_by(*field)
        • Author.objects.order_by('id')
        • 按id升序查询
        • 返回[<Author: Wang>, <Author: xiaoming>]  

           

        • Author.objects.order_by('-id')
        • 按id降序查询
        • 返回 [<Author: xiaoming>, <Author: Wang>]

           

      • exists()
        • Author.objects.exists()
        • 如果queryset有数据,则返回True,否则返回False

           

           

posted @ 2018-09-25 17:09  运维00001  阅读(112)  评论(0编辑  收藏  举报