zoukankan      html  css  js  c++  java
  • 【原】Django数据Model层总结

    vlaues -
    单条记录 - <class 'dict'>
    多条记录 - <class 'django.db.models.query.QuerySet'>
    vlaues_list -
    单条记录 - <class 'tuple'>
    多条记录 - <class 'django.db.models.query.QuerySet'>

    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

    1.增

    增即创建新的对象或添加新的条目。如果我们要给数据库添加一篇新的文章,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')

    2.删

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

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

    Article.objects.all().delete()

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

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

    3.改

    改既可以用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')

    4.查

    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()
  • 相关阅读:
    ftp卡死问题
    Windows 10 安装FileZilla Server
    The last packet successfully received from the server was 39,900 milliseconds ago问题解决
    java.sql.SQLException: Could not retrieve transaction read-only status from server 问题解决
    三主机配置 keepalived VIP高可用
    subprocess.Popen在win10下会有异常
    python 使用内置方法读取注册表
    过年有感
    java.security.InvalidKeyException: Illegal key size 解决办法
    Android Studio 检查Top Activity
  • 原文地址:https://www.cnblogs.com/HYanqing/p/11619194.html
Copyright © 2011-2022 走看看