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=, 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=)
article.title = "New article title"
article.save()

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

article = Article.objects.get(id=).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=)

案例三,模糊查询返回数据集, 并去重

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

【原】Django数据Model层总结的更多相关文章

  1. Django中model层详解

    #!/usr/bin/env python# _*_ coding:utf-8 _*_ from django.db import models class UserType(models.Model ...

  2. 【转】Django之Model层的F对象,Q对象以及聚合函数

    转自:https://blog.csdn.net/wsy_666/article/details/86692050 一.F对象: 作用:用于处理类属性(即model的某个列数据),类属性之间的比较.使 ...

  3. c#-1 数据结构 定义相关 界面交互数据 Model层

    1.时间用Nullable<UInt32> 除了最初时间用DateTime TimeSpan不行. 2.其他元素也用Nullable<UInt32> 3.list集合数据绑定类 ...

  4. django使用model创建数据库表使用的字段

    Django通过model层不可以创建数据库,但可以创建数据库表,以下是创建表的字段以及表字段的参数.一.字段1.models.AutoField 自增列= int(11) 如果没有的话,默认会生成一 ...

  5. 64、django之模型层(model)--建表、查询、删除基础

    要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...

  6. 67、django之模型层(model)--查询补充及mookie

    本篇导航: F查询与Q查询 cookie 一.F查询与Q查询 1.以Book表为例 class Book(models.Model) : title = models.CharField(max_le ...

  7. django之模型层(model)--建表、查询、删除基础

    要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...

  8. django之模型层(model)--查询补充及cookie

    已经连续写了好几篇django的模型层(model)增删改查的随笔了,没篇大篇幅都是查询相关的操作,可以看出查询在数据的操作中是多么的重要,而本篇最后再补充一点关于关于查询的一些方法,模型层基本的操作 ...

  9. Django数据操作F和Q、model多对多操作、Django中间件、信号、读数据库里的数据实现分页

    models.tb.objects.all().using('default'),根据using来指定在哪个库里查询,default是settings中配置的数据库的连接名称. 外话:django中引 ...

随机推荐

  1. 关于static 关键字的总结

    转发自:https://www.cnblogs.com/xrq730/p/4820992.html 前言 之前讲到final关键字的作用是每次面试的时候我必问求职者的两个问题之一,另外一个问题就是文本 ...

  2. 如和针对CPU时间百分比,Mem使用bytes,以及Network RecvBytes/SendBytes指标性能压测数据可视化

    设计思路:通过jmeter5.1压测获取cpu,Mem,Network的压测指标数据利用pandas+openpyxl进行数据可视化: 涉及添加jar包:下载地址:https://files.cnbl ...

  3. zxEditor

    <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="X-UA-C ...

  4. SpringMVC的三种处理器适配器

    SpringMVC具有三种处理器适配器,他们分别是BeanNameUrlHandlerMapping.SimpleControllerHandlerAdapter.ControllerClassNam ...

  5. 使用js为表格添加一行

    今天同事问了我一个问题,为表格添加新的行,我用的js写了一下,代码如下: <!DOCTYPE html> <html> <head> <meta charse ...

  6. Eclipse代码规范

    配置代码自动格式化 1.导入规范文件  codeStyle.xml <?xml version="1.0" encoding="UTF-8" standa ...

  7. MySQL存储引擎优化

    如何在两种存储引擎中进行选择? ① 是否有事务操作?有,InnoDB. ②是否存储并发修改?有,InnoDB. ③是否追求快速查询,且数据修改较少?是,MyISAM. ④是否使用全文索引?如果不引用第 ...

  8. hadoop学习笔记(五)hadoop伪分布式集群的搭建

    本文原创,如需转载,请注明作者和原文链接 1.集群搭建的前期准备   见      搭建分布式hadoop环境的前期准备---需要检查的几个点 2.解压tar.gz包 [root@node01 ~]# ...

  9. matlab 绘制原始信号的谐波

    这里以锯齿信号为例: clear;clc; figure time = 0:1/20:1000; wave = sawtooth(time); subplot(3, 1, 1); plot(time, ...

  10. +(new Date())

    +(new Date()) 等于 new Date().getTime();展示 1561003191879 毫秒时间戳