【原】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=, 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层总结的更多相关文章
- Django中model层详解
#!/usr/bin/env python# _*_ coding:utf-8 _*_ from django.db import models class UserType(models.Model ...
- 【转】Django之Model层的F对象,Q对象以及聚合函数
转自:https://blog.csdn.net/wsy_666/article/details/86692050 一.F对象: 作用:用于处理类属性(即model的某个列数据),类属性之间的比较.使 ...
- c#-1 数据结构 定义相关 界面交互数据 Model层
1.时间用Nullable<UInt32> 除了最初时间用DateTime TimeSpan不行. 2.其他元素也用Nullable<UInt32> 3.list集合数据绑定类 ...
- django使用model创建数据库表使用的字段
Django通过model层不可以创建数据库,但可以创建数据库表,以下是创建表的字段以及表字段的参数.一.字段1.models.AutoField 自增列= int(11) 如果没有的话,默认会生成一 ...
- 64、django之模型层(model)--建表、查询、删除基础
要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...
- 67、django之模型层(model)--查询补充及mookie
本篇导航: F查询与Q查询 cookie 一.F查询与Q查询 1.以Book表为例 class Book(models.Model) : title = models.CharField(max_le ...
- django之模型层(model)--建表、查询、删除基础
要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...
- django之模型层(model)--查询补充及cookie
已经连续写了好几篇django的模型层(model)增删改查的随笔了,没篇大篇幅都是查询相关的操作,可以看出查询在数据的操作中是多么的重要,而本篇最后再补充一点关于关于查询的一些方法,模型层基本的操作 ...
- Django数据操作F和Q、model多对多操作、Django中间件、信号、读数据库里的数据实现分页
models.tb.objects.all().using('default'),根据using来指定在哪个库里查询,default是settings中配置的数据库的连接名称. 外话:django中引 ...
随机推荐
- Light Up Your Business Promotions With LED Keychain
Imagine you want to insert the car key into the keyhole in the dark. What would you do? You will def ...
- python夜记
关于多行字符串(multi-line strings)的表现: Python列表是基于0索引的.(zero-indexed). 晌午起床来嘞,再来些笔记: Treasures 1: 列表方法rever ...
- 闲来无事.gif
- Sql Server跨服务器操作数据
var serversSql = "select count(*) count from sys.servers WHERE name='ITSV'"; var result = ...
- robotframework初始化时有返回值怎么处理
方法一:set suite variable/set global variable 假设执行add school class会返回一个id,这个id在后面的脚本中还要使用. 因为初始化时只能有一个关 ...
- 无显示器安装raspberry zero w树莓派 zero w
笔者的环境 1. Macbook 电脑用于烧录树莓派系统到SD卡 2. 树莓派 zero w 把SD卡放进读卡器,插到Mac电脑上, 打开命令行工具Terminal diskutil list列出di ...
- 69-for和if的嵌套使用
#include <stdio.h> int main (void) { int i; ; ; i<=; ++i) { == )//%3==0 这个意思是i除以3,余数是0!说普通点 ...
- js加密(八)新浪微博登录
1. url: https://weibo.com/ 2. target: 登录 3. 分析.由于需要填写验证码,本篇只分析破解用户名和密码加密部分,不做验证码识别. 3.1 老规矩,F12,随便输入 ...
- C# 篇基础知识9——特性、程序集和反射
特性(Attribute)是用于为程序元素添加额外信息的一种机制.比如记录文件修改时间或代码作者.提示某方法已经过期.描述如何序列化数据等等.方法.变量.属性.类.接口.结构体以及程序集等都是程序元素 ...
- Qt: 释放窗口资源
1. 对于使用指针,使用new创建的窗口,当然可以使用delete显示的释放其占用的资源: Widget *w = new Widget(); delete w; 2. 对于使用指针,使用new创 ...