使用Django模型Models对数据库进行增删改查

Django的抽象模型Models可以直接对数据库进行增删改查,不需要你自己写SQL语言来进行相关数据库操作。今天我们就以博客blog为例,看下Django是如何对数据库进行增删改查的。

我们将会用到如下这个简单的Article模型: 


from django.db import models

class Article(models.Model):
    title = models.CharField('标题', max_length=200, unique=True)
    body = models.TextField('正文')

    def __str__(self):
        return self.title


增即创建新的对象或添加新的条目。如果我们要给数据库添加一篇新的文章,Django提供了2种常见操作方式。

方法一,传统save方法。


obj = Article(title="My first article", body="My first article body")
obj.save()
注意: 该方法如果不选择save(), 创建的对象将不会保存到数据库中去。正因为如此,Django还提供了更便捷的create方法。

方法二,便捷的create方法。


Article.objects.create(title="My first article", body="My first article body")
注意: 对Django自带auth模块中的User模型操作,比如创建新的用户时,请用create_user方法。该方法会将密码自动加Hash存储到数据库中。


from django.contrib.auth.models import User
user = User.objects.create_user(username='john',
                                 email='john@gmail.com',
                                 password='somepwd')


删即删除一个已有对象或从表中删除一个已有条目。Django也允许同时删除多个对象或条目。

案例一,删除所有文章 (请慎用!!)

Article.objects.all().delete()
案例二,删除标题里含有python的所有文章(不区分大小写)


Article.objects.filter(title__icontains="python").delete()


改既可以用save方法,也可以用update方法。其区别在于save方法不仅可以更新数据中现有对象数据,还可以创建新的对象。而update方法只能用于更新已有对象数据。一般来说,如果要同时更新多个对象数据,用update方法更合适。

案例一,利用save方法更新某一文章标题


article = Article.objects.get(id=1)
article.title = "New article title"
article.save()
案例二,利用update方法更新某一文章标题


article = Article.objects.get(id=1).update(title='new title')
案例三,利用update方法更新多篇文章标题


article = Article.objects.filter(title__icontains='python').update(title='Django')


Django对于数据库的查询主要是get和filter等方法。我们来看几个案例。

案例一,查询所有数据


Article.objects.all()
Article.objects.all().values()
# 只获取title列表-字典形式
Article.objects.all().values('title')
# 只获取title列表- 元组形式,只有value,没有key
Article.objects.all().values_list('title')
注意:使用values和values_list可以减少数据库查询工作量。如果只需要在模板中使用某些字段,而不是全部字段,建议使用values和values_list。

案例二,查询某一条数据


Article.objects.get(id=1)
案例三,模糊查询返回数据集, 并去重


Article.objects.filter(title__icontains='python').distinct()

 

posted @ 2019-10-30 20:39  Archger  阅读(155)  评论(0编辑  收藏  举报