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. LED Decorative Light Manufacturer - LED Neon Rope: 5 Advantages

    In the past 100 years, lighting has come a long way. Nowadays, the decorative LED lighting design ca ...

  2. 关于我 & 关于这个博客

    关于我 OIer,初一在读,蒟蒻,普及组选手,只拿过两次PJ2=,实乃菜也 喜欢数学,OI,OI 上主要研究高级数据结构(如平衡树)和一些不那么暴力的算法(如分块) 打不动 CF . 关于这个博客 是 ...

  3. nmonchart 分析.nmon监控数据成html展示

    下载地址:http://nmon.sourceforge.net/pmwiki.php?n=Site.Nmonchart chart安装包:http://sourceforge.net/project ...

  4. RNGCryptoServiceProvider 生成订单号

    先生成1~1000的随机数 class Program { // Create a new instance of the RNGCryptoServiceProvider. private stat ...

  5. python中GraphViz's executables not found的解决方法以及决策树可视化

    出现GraphViz's executables not found报错很有可能是环境变量没添加上或添加错地方. 安装pydotplus.graphviz库后,开始用pydotplus.graph_f ...

  6. Nuxt配置动态路由以及参数校验

    动态路由就是带参数的路由.比如我们商品列表里很多商品详细页,这时候就需要动态路由的帮助了. 比如我们新建一个commodity文件夹,新建一个index.vue 文件,然后新建一个_id.vue (以 ...

  7. Codeforces Round #618 (Div. 1)B(几何,观察规律)

    观察猜测这个图形是中心对称图形是则YES,否则NO #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace ...

  8. WiFi密码破解(wpa/wpa2)

    参考一篇很好的贴子:https://www.cnblogs.com/daoyi/p/Kali-Linux-shi-yongAircrack-po-jiewifi-mi-ma-wpawp.html #前 ...

  9. 设备驱动基础学习--poll

    使用非阻塞I/O的应用程序通常会使用select()和poll()系统调用查询是否可对设备进行无阻塞的访问,这两个系统调用最终又会引发设备驱动中的poll()函数被执行,所以我们的问题就集中到了如何编 ...

  10. iCCID激活终结,苹果iPhone卡贴机“辉煌”时代落幕

       iPhone卡贴机,是一个神奇的存在.所谓的iPhone卡贴机,原本是"有锁机".它们通常是国外运营商的合约机,为了限制使用地域而"上锁",不能直接在国内 ...