【原】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中引 ...
随机推荐
- 【做题笔记】洛谷P1002过河卒
虽说是 dp 入门题,但还是有很多细节需要注意 如果设 \(f_{x,y}\) 为目标地点为 \((x,y)\) 时走的种数,那么答案就是 \(f_{n,m}\) 在不考虑那只讨厌的马的情况下,对于任 ...
- 【vue】 router.beforeEach
import store from '@/store' const Vue = require('vue') const Router = require('vue-router') Vue.use( ...
- css 文本换行 文本溢出隐藏用省略号表示剩下内容
正常文本的显示 <style> p{ width: 300px; box-shadow: 0 0 10px #ccc; padding: 0 20px; margin: 20px 100p ...
- Java学习笔记(八)面向对象---抽象类
当多个类中出现相同功能,但是功能主体不同时,我们可以向上抽取,只抽取功能定义,而不抽取功能主体. 抽象类的特点 抽象方法一定在抽象类中. 抽象方法和抽象类都必须被abstract关键字修饰. 抽象类不 ...
- IntelliJ IDEA 2017.3尚硅谷-----滚轮修改字体大小
- ubuntu刪除軟件
1.打开一个终端,输入dpkg --list ,按下Enter键,终端输出以下内容,显示的是你电脑上安装的所有软件2.在终端中找到你需要卸载的软件的名称,列表是按照首字母排序的.3.在终端上输入命令s ...
- 错误记录(一):VSCode
VS Code莫名其妙突然变卡. 后来重新安装,下载以前版本,设置防止循环,都不太管用. 最后想添加VS Code目录到windows扫描白名单,但因为系统之前是英文不太好看懂,所以又调回了中文. 这 ...
- 题解【洛谷P5019】[NOIP2018]铺设道路
题目描述 春春是一名道路工程师,负责铺设一条长度为 \(n\) 的道路. 铺设道路的主要工作是填平下陷的地表.整段道路可以看作是 \(n\) 块首尾相连的区域,一开始,第 \(i\) 块区域下陷的深度 ...
- vue+axios安装
Axios是一个基于promise的HTTP库,可以用在浏览器和node.js中. 安装方式: 1.使用cdn <script src="https://unpkg.com/axios ...
- Go函数高级
1. 函数的数据类型 package main import "fmt" func main() { /* go语言的数据类型: 基本数据类型: int,float,bool,st ...