示例表:
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>]
- all()
- 增加数据
-
-
- get(**kwargs)
- Author.objects.get(id=3)
- 取id=3的数据行
- 返回model对象,由于Author类有__str__方法,所以返回xiaoming
- 查询的结果必须是单行数据
- get(**kwargs)
-
-
-
- filter(**kwargs)
- Author.objects.filter(name='xiaoming')
- 取name='xiaoming'的所有数据行
- 返回 [<Author: xiaoming>, <Author: xiaoming>]
- filter(**kwargs)
-
-
-
-
- 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(*field)
-
-
-
- values_list(*field)
- Author.objects.filter(name='xiaoming').values_list('age', 'name')
- 查询name='xiaoming'的数据行,并只展示age和name字段
- 返回 [(20, 'xiaoming'), (30, 'xiaoming')]
- values_list(*field)
-
-
-
- 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>]
- exclude(**kwargs)
-
-
-
- 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
- order_by(*field)
-