# views.pyfrom .models import ModelName # 首先需要引入操作的模型
数据库API在视图中使用
1. 常用API
1.1. 【速查表单】
| 操作 | API |
|---|---|
| 增删修改 | |
| 创建对象 | create() |
| 批量创建对象 | bulk_create() |
| 保存对象 | save() |
| 批量删除对象 | delete() |
| 批量更新 | update() |
| 没找到更新对象就创建 | update_or_create() |
| 获取查询集及过滤 | |
| 表中所有数据 | all() |
| 所有数据中指定范围 | all()[:5] |
| 返回指定参数查询内容 | filter() |
| 返回除了制定参数查询内容 | exclude() |
| 获取单一对象 | |
| 获取单一对象 | get() |
| 没找到就创建 | get_or_create() |
| 查询集操作 | |
| 排序 | order_by() |
| 反向排序 | reverse() |
| 去重 | distinct() |
| 统计对象的个数 | count() |
| 获取最近的对象 | latest() |
| 获取最早的对象 | earliest() |
| 获取第一个对象 | first() |
| 获取最后一个对象 | last() |
| 判断queryset中是否有对象 | exists() |
| 返回包含对象具体值的字典的QuerySet | values() |
| 返回包含对象具体值的元组的QuerySet | values_list() |
| 创建空的查询集 | none() |
| 使用聚合函数 | annotate() |
| 聚合操作 | aggregate() |
1.2. 增删修改
1.2.1. 创建对象:两步操作
>>> b = Blog(name='Blog Name', tagline='All the news') # 创建对象>>> b.save() # 保存到数据库
1.2.2. 创建对象:create()
b = Blog.objects.create(name='Blog Name', tagline='All the news')
无需执行 save()
1.2.3. 批量创建对象:bulk_create()
Entry.objects.bulk_create([Entry(headline='This is a test'),Entry(headline='This is only a test'),])
1.2.4. 保存对象:save()
>>> b.name = 'New name'>>> b.save()首先要获取 b 对象
1.2.5. 批量删除对象:delete()
>>> Entry.objects.filter(pub_date__year=2005).delete()(5, {'webapp.Entry': 5})
返回:被删除对象总数量,和包含各种类型及数量的字典
1.2.6. 批量更新:update()
# 链式Entry.objects.filter(pub_date__year=2007).update(headline='Every')# 更新外键>>> b = Blog.objects.get(pk=1)>>> Entry.objects.all().update(blog=b)
批量更新时,字段 auto_new 参数无效,如果想有效就用 for in
for item in my_queryset:item.save()
1.3. 获取查询集及过滤
1.3.1. 表中所有数据:all()
all_entries = Entry.objects.all()
1.3.2. 所有数据中指定范围:all()[:5]
>>> Entry.objects.all()[:5] # 前五个(缓存)>>> Entry.objects.all()[:10:2] # 按步长(数据库)
不支持负索引
1.3.3. 返回指定参数查询内容:filter()
Entry.objects.filter(pub_date__year=2006)
参数格式必须是 Django 设置的字段格式
1.3.4. 返回除了制定参数查询内容:exclude()
Entry.objects.exclude(pub_date__year=2006)
参数设置同上
1.4. 获取单一对象
1.4.1. 获取单一对象:get()
one_entry = Entry.objects.get(pk=1)# pk 和 id 都为一个值时可以互用
异常(这些异常都是模型类的属性):
- 没有找到:DoesNotExist
- 找到多个:MultipleObjectsReturned
get() 参数与 filter() 一样(与 filter()[0] 不同的是,get() 如果没有找到对象会抛出 DoesNotExist 异常)
1.5. 查询集操作
1.5.1. 排序:order_by()
>>> Entry.objects.order_by('headline')>>> Entry.objects.order_by('blog__name', 'headline') # 根据两个字段# 升序和降序User.objects.order_by('name') # 升序User.objects.order_by('-name') # 降序
1.5.2. 返回包含对象具体值的元组的QuerySet:values_list()
与values()类似,只是返回的是元组而不是字典。
