Django2.0入门教程:ORM增删改操作
我们建立模型、保存数据为的就是在需要的时候可以查询得到数据。Django自动为所有的模型提供了一套完善、方便、高效的API。
结合之前我们创建的Models,下面是我们的models.py代码:
from django.db import models from django.contrib.auth.models import User class Category(models.Model): name = models.CharField('分类',max_length=100) class Meta: verbose_name = '分类'verbose_name_plural = verbose_name def __str__(self): return self.name class Tags(models.Model): name = models.CharField('标签',max_length=100) class Meta: verbose_name = '标签'verbose_name_plural = verbose_name def __str__(self): return self.name class Article(models.Model): title = models.CharField('标题',max_length=70) intro = models.TextField('摘要', max_length=200, blank=True) category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name='分类', default='1') tags = models.ManyToManyField(Tags, blank=True, verbose_name='标签') body = models.TextField() user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='作者') created_time = models.DateTimeField('发布时间',auto_now_add=True) class Meta: verbose_name = '文章'verbose_name_plural = verbose_name def __str__(self): return self.title
1、基础准备
配置URL
mysite/urls.pyfrom blog import views #新增 urlpatterns = [ path('admin/', admin.site.urls), path('orm/', views.orm), #新增 ]
添加一个与URL对应的视图函数
blog/views.py from django.shortcuts import render, HttpResponse from blog import models def orm(requst): return HttpResponse('orm')
在浏览器里访问http://127.0.0.1:8000/orm/。我们这样做的目的是,我们一会把数据操作方法(查询语句)都写在 orm视图函数里,通过URL,触发视图函数,然后在Pycharm的Terminal里查看输出日志,验证我们查询的效果。
2、增加数据
blog/views.pyfrom django.shortcuts import render, HttpResponse from blog import models def orm(requst): #增加一篇文章 models.Article.objects.create(title='增加标题一', category_id=3, body='增加内容一', user_id=1) return HttpResponse('orm')
操作之前,数据库里的文章内容如下:
在浏览器里访问http://127.0.0.1:8000/orm/之后,触发视图函数。然后刷新数据库看效果。
数据库里已经添加了一篇文章。说明我们之前的增加文章操作,已经成功。
如果不知道如何使用Database管理数据库,请查看文章:使用Pycharm里的Database对数据库进行可视化操作
数据增加的方法一共有三种:
from django.shortcuts import render, HttpResponse from blog import models # 导入数据库操作模块 def orm(requst): # 第一种方法: # models.Article.objects.create(title='增加标题一', category_id=3, body='增加内容一', user_id=1) # 第二种方法:添加数据,实例化表类,在实例化里传参为字段和值 obj = models.Article(title='增加标题二', category_id=4, body='增加内容二', user_id=1) # 写入数据库 obj.save() # 第三种方法:将要写入的数据组合成字典,键为字段值为数据 dic = {'title': '增加标题三', 'category_id': '4', 'body': '增加内容三', 'user_id': '1'} # 添加到数据库,注意字典变量名称一定要加** models.Article.objects.create(**dic) return HttpResponse('orm')
使用第二和第三种方法增加数据,刷新页面之后,数据库效果如下:
我们看到,数据库里已经增加了两条数据。
严格来说,增加数据只有两种:create( )方法和save( )方法。一般我们推荐使用第三种方法。
例子:获取用户提交的的数据创建用户:
#hmtl<form action="/useradd/" method="post"> <p>用户名:{{ obj.username }}</p> <p>密码:{{ obj.password }}</p> <input type="submit" value="submit"/> </form> #viewsdef useradd(request): obj = AccountForm.UserAdd(request.POST) if request.method == 'POST': if obj.is_valid(): user_input = obj.clean() print user_input #这里直接通过**加上用户的输入即可,因为用户的输入时字典类型的 models.UserInfo.objects.create(**user_input) print models.UserInfo.objects.all() return render(request,'account/useradd.html',{'obj':obj}) return render(request,'account/useradd.html',{'obj':obj}) #结果 --用户输入 {'username': 'dashuaige', 'password': '123123'} --print models.UserInfo.objects.all() 返回值 #注这里我们是通过__unicode__方法进行输出了否则是对象! [<UserInfo: sunqihu>, <UserInfo: alex>, <UserInfo: wutenglan>, <UserInfo: dashuaige>]
三、删除数据delete()
from django.shortcuts import render, HttpResponse from blog import models def orm(requst): #删除id=6的文章(数据) title = models.Article.objects.filter(id=6).delete() return HttpResponse('orm')
删除之前:
删除之后:
ID为6的文章,已经被删除。
四、修改数据update(字段=值)
from django.shortcuts import render, HttpResponse from blog import models def orm(requst): #把标题'增加标题二',修改成'我被修改了'。将指定条件的数据更新,支持 **kwargs,支持字典。 title = models.Article.objects.filter(title='增加标题二').update(title='我被修改了') return HttpResponse('orm')
修改前:
修改之后:
修改成功!