1、通过视图向数据库中增加数据
- 1、Entry.objects.create(属性1=值1,属性2=值2)
# urls.py
urlpatterns = [url(r'^add_data/$', add_data_views)] # 配置视图函数
# views.py
from django.http import HttpResponse
from .models impotr * # 导入实体类
def add_data_views(request): # 定义视图函数
Author.objects.create(name='Sam', age=33, email='sam@123.com')
# 在Author表中插入数据,字段为name,age,email
return HttpResponse('ADD OK')
- 2、创建一个视图对象,通过save()方法完成
- obj = Entry(属性1=值1,属性2=值2)
- obj.save()
# urls.py
urlpatterns = [url(r'^add_data/$', add_data_views)] # 配置视图函数
# views.py
from django.http import HttpResponse
from .models impotr * # 导入实体类
def add_data_views(response): # 定义视图函数
author = Author(name='Jean', age=36, email='jean@123.com')
# 在Author表中插入数据,字段为name,age,email
author.save()
return HttpResponse('ADD OK')
- 3、通过字典创建视图对象,再调用save()
# urls.py
urlpatterns = [url(r'^add_data/$', add_data_views)] # 配置视图函数
# views.py
from django.http import HttpResponse
from .models impotr * # 导入实体类
def add_data_views(response): # 定义视图函数
dic = { 'name': 'Jack',
'age': 41,
'email': 'jack@123.com'}
author = Author(**dic)
author.save()
# 在Author表中插入数据,字段为name,age,email
author.save()
return HttpResponse('ADD OK')
2、查询操作
- 所有的查询都要在Entry.objects 的基础上完成
- 1、基本查询操作 all()
- 用法:Entry.objects.all()
- 相当于 select * from ……
- 返回:QuerySet (查询结果集 )
# urls.py
urlpatterns = [url(r'^select_data/$', select_data_views)] # 配置视图函数
# views.py
from django.shortcuts import render
from django.http import HttpResponse
from .models impotr * # 导入实体类
def select_data_views(request): # 定义视图函数
data = Author.objects.all()
print(data)
# <QuerySet [<Author: Author object (1)>, <Author: Author object (2)>]>
# 查询Author表中的所有数据
return render(request, 'show_data.html', locals())
# locals() 就是将data封装成一个字典传到show_data.html中
<body>
{% for author in data %}
<p>id:{{author.id}}</p>
<p>name:{{author.name}}</p>
<p>age:{{author.age}}</p>
<p>email:{{author.email}}</p>
{% endfor %}
<!-- 循环取查询结果,并展示各字段的值 -->
</body>
- 2、基本查询操作 all().values(‘列名’) django2版本支持多列查询
- 用法:entry.all().values(‘name’)
- 相当于 select name from ……
- 作用:查询所有记录的某一项的值
- 3、基本查询操作 all().values_list(‘列名1’,‘列名2’) django1版本支持,2版本不支持
- 用法:entry.all().values_list(‘name’,‘age’)
- 相当于 select name,age from ……
def select_data_views(request):
data = Author.objects.all().values('name','age') # django 2版本写法
data = Author.objects.all().values_list('name','age') #django 1版本写法
return render(request, 'show_data.html', locals())
- 4、基本查询操作 get()
- 只能返回一条记录
- 如果查询返回多条记录,则报错
- 用法:entry.objects.get(id=4,name=‘张三’)
- 相当于:select * from …… where id=4 and name=‘张三’
def select_data_views(request):
data = Author.objects.get(id=3)
return render(request, 'show_data.html', locals())
- 5、基本查询操作 exclude()
- 作用:对给定的条件取反
- 用法:entry.objects.exclude(id=3,age=27)
- 相当于:select * from …… where not (id=3 and age=27)
- 6、基本查询操作 order_by()
- 作用:排序
- 用法:entry.objects.order_by(‘name’,’-age’)
- 相当于:select * from …… order by name,age desc
- 默认为升序排序,需要降序排列时,只需要在列名前加“-”号
- 7、filter()
- 根据自定义条件查询结果集,可以是一个,也可以是多个,如果是多个用逗号隔开
- 如果条件是多个,内部用 AND 进行连接
- 使用Entry的属性作为filter()的条件
- 用法:author.objects.filter(id=1)
- 相当于:select * form author where id=1
- author.objects.filter(id=1,name=‘Sam’)
- 相当于:select * from author where id=1 and name=‘Sam’
- 使用 Filed Lookups(查询谓词)
- __exact:等值判断
- Entry.objects.get(id__exact=14)
Entry.objects.get(id__exact=None) - SELECT … WHERE id = 14;
SELECT … WHERE id IS NULL;
Filed Lookups参考文档
3、修改操作
- 1、修改单个对象
- 1、通过get()得到要修改的实体对象
- 2、通过实体对象修改属性值
- 3、再通过实体对象的save()函数,实现保存
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
def select_data_views(request):
data_list = Author.objects.all()
return render(request, 'show_author.html',locals())
def updata_views(request):
author = Author.objects.get(id=1)
author.name = 'Jame'
author.save()
# 跳转到select_data_views的视图,请求转发,url为localhost:8000/music/updata_data
# return select_data_views(request)
# 使用重定向的方式完成视图的跳转,url为localhost:8000/music/select_data
return HttpResponseRedirect('/music/select_data/')
- 2、批量修改(修改查询结果集)
- 调用update()函数
- Author.objects.all().update(属性=值,……)
请求的转发流程图(updata将request转发给select,url地址不变)
浏览器 updata_views select_data_views request select_data_views(request) response response 浏览器 updata_views select_data_views
重定向流程图(浏览器发送了两次request,url地址改变)
浏览器 updata_views select_data_views request HttpResponseRedirect() request response 浏览器 updata_views select_data_views
4、删除操作
- 1、删除单个对象
- obj = Author.objects.get(id=1)
- obj.delete()
- 2、批量删除
- obj= Author.objects.all()
- obj.delete()
5、F和Q操作
- 1、F()操作
- 作用:在执行中获取某列的值
- 语法:F(‘列名’)
from django.db.models import F
Author.objects.all().update(age = F('age') + 10) # 所有人的年龄加10
# update author set age = age+10
- 2、Q()操作
- 作用:条件的关联,实现或的操作(or)
- 语法:Q(‘条件’)
from django.db.models import Q
Author.objects.filter(Q(age__gt=30)|Q(name='Sam'))
# select * from author where age>30 or name='Sam'
6、原生数据库操作
- 1、查询
- 函数:raw()
- 语法:Entry.objects.raw(sql)
def raw_views(request):
sql = "select * from index_author where email like '%%@qq.com';"
author_list = Author.objects.raw(sql)
return render(request, 'raw.html', locals())
- 2、增删改(很少用)
def sql(request):
with connection.cursor() as cursor: # 数据库游标
sql = 'delect from author;'
cursor.execute(sql)
return render(request, 'show_author.html',locals())