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里查看输出日志,验证我们查询的效果。

544fdb09db35826f8b941bca1a8efc4.png

6216f45d24f524a81a65706076d8baf.png

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')

操作之前,数据库里的文章内容如下:

517616c2b32f7befe12fc9232a8cc5e.png

在浏览器里访问http://127.0.0.1:8000/orm/之后,触发视图函数。然后刷新数据库看效果。

5988037cd9b002f3015ce964fea1cd4.png

数据库里已经添加了一篇文章。说明我们之前的增加文章操作,已经成功。

如果不知道如何使用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')

使用第二和第三种方法增加数据,刷新页面之后,数据库效果如下:

3f50014f878e4fdd49c47d2e14a26c9.png

我们看到,数据库里已经增加了两条数据。

严格来说,增加数据只有两种: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')

删除之前:

8276640dc6bb858af7dffefc7e9b714.png

删除之后:

da3375e7a1a48bcf569f35348db4c7c.png

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')

修改前:

60f83d7a8db1b0862b710150050664d.png

修改之后:

07d1a153af6a1a99af74895186f7839.png

修改成功!