zoukankan      html  css  js  c++  java
  • 使用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()

  • 相关阅读:
    使用简单的反射技术重构组合查询串功能
    沤血分享之:使用Opera浏览器技巧全集
    项目中用到的RE分析
    关于调用新浪微博与腾讯微博
    正则 (?i,m,s,x,g)
    求职路 第二章 深圳篇
    12320平台架构及部署
    网站会员密码
    求职路 第二章 技术篇
    TFS故障一二
  • 原文地址:https://www.cnblogs.com/Archger/p/12774650.html
Copyright © 2011-2022 走看看