Django 模型中的CRUD
一、通过 ORM 向 DB 中增加数据
1、Entry.objects.create(属性=值,属性=值)
			Entry:具体要操作的Model类
ex:
  Author.objects.create(name='zsf',age=85)
2、创建一个 Models 对象,通过对象的 save() 完成增加
ex:
  author = Author(names='laoshe',age=65)
  author.save()
3、使用字典构建属性,通过 save() 完成增加
			dic = {
				'属性1':'值1',
				'属性2':'值2',
			}
obj = Entry(**dic)
			obj.save()
4、首先尝试获取,不存在就创建,可以防止重复
Author.objects.get_or_create(names='laoshe',age=65)
备注:前三种方法返回的都是对应的 object,最后一种方法返回的是一个元组,(object, True/False),创建时返回 True, 已经存在时返回 False
二、查询操作
通过 Entry.objects 调用查询接口
1、查询所有对象
			语法:all()
			用法:Entry.objects.all()
			返回:QuerySet
ex:
			  Author.objects.all()
			  等同于:select * from index_author
返回结果:
			<QuerySet [<Author: Author object>, <Author: Author object>, <Author: Author object>]>
2、查询指定列
			语法:values('列1','列2',...)
			用法:Entry.objects.values('列1','列2',...)
			返回:QuerySet(返回一个包含数据的字典的queryset,而不是模型实例)
ex:
				  Author.objects.values('names','age')
				  等同于:select name,age from index_author
注意:
				  values()可以用在所有的返回查询结果集的方法的后面
Author.objects.all().values('names','age')
<QuerySet [{'age': 65, 'names': 'ZhuZiqing'}, {'age': 68, 'names': 'laoshe'}, {'age': 59, 'names': 'MoYan'}]>
3、排序函数
语法:order_by('列1','列2')
			用法:Entry.objects.order_by('-列1','列2')
				默认的排序规则是升序
				如果需要降序,则在列前添加一个 "-"
			ex:
				  1、Author.objects.order_by('age')
				  2、Author.objects.all().order_by('-age');
4、对条件取反
			语法:exclude()
			用法:Entry.objects.exclude(条件)
			ex:
				  1、Author.objects.exclude(id=3)
					  等同于:select * from author where not (id=3)
				  2、Author.objects.exclude(id=3,age=85)
					  等同于:select * from author where not (id=3 and age=85)
5、根据条件查询部分行数据(重难点)
			方法:filter(参数)
			用法:Entry.objects.filter(参数)
			1、使用 Entry 中的属性作为查询参数
				多个参数的话,使用 , 隔开,映射到sql语句上,是使用 and 来进行关联的
				ex:
					  1、Author.objects.filter(id=1)
						  等同于:select * from author where id=1
					  2、Author.objects.filter(id=1,name='莫言')
						  等同于:select * from author where id=1 and name='莫言'
			2、通过 Field Lookup(查询表达式)完成复杂条件的构建
				查询表达式:每个查询表达式都是一个独立的查询条件,可以用在所有的有查询条件的位置处
				  1、__contains(__icontains忽略大小写)
					  作用:筛选出属性中包含指定关键字的记录(模糊查询)
					  ex:
						    Author.objects.filter(names__contains='ao')
						    select * from author where names like '%ao%'
2、__in
   作用:筛选出属性值在其中之一的记录
   ex:
    Author.objects.filter(id__in=[1,3])
      select * from author where id in  (1,3)
  3、__lt
					  作用:筛选出属性值小于指定值的记录
				  4、__lte
					  作用:筛选出属性值小于等于指定值的记录
				  5、__gt
					  作用:筛选出属性值大于指定值的记录
				  6、__gte
					  作用:筛选出属性值大于等于指定值的记录
				  7、__startswith
					  作用:筛选出以指定关键字开始的记录
				  8、__endswith
					  作用:筛选出以指定关键结尾的记录
6、查询只返回一条数据
			语法:get(条件)
			用法:Entry.objects.get(查询条件/表达式)
			get和filter区别:
  参数:
    get 的参数只能是model中定义的那些字段,只支持严格匹配
filter 的参数可以是字段,也可以是扩展的查询表达式,如in,contains等
返回值:
get 返回值是一个定义的model对象
filter 返回值是一个新的queryset对象,然后可以对queryset在进行查询返回新的queryset对象,支持链式操作
异常:
get 只有一条记录返回的时候才正常,也就说明get的查询字段必须是主键或者唯一约束的字段,当返回多条记录或者是没有找到记录的时候都会抛出异常
filter 有没有匹配的记录都可以,如果没有匹配的记录会返回一个空的queryset
三、修改数据
1、修改单个数据
			  1、通过 get() 得到要修改的实体对象
			  2、通过实体对象的属性修改属性值
			  3、再通过实体对象的save()保存回数据库
			ex:
				  au = Author.objects.get(id=1)
				  au.names = "老舍"
				  au.age = 45
				  au.save()
2、批量修改数据
			调用查询结果集的 update() 完成批量修改
			Entry.objects.all().update(属性=值,属性=值)
ex:
				  Author.objects.all().update(age=75)
四、删除数据
		调用实体对象/查询结果集的 delete() 即可
Person.objects.filter(name__contains="abc").delete() # 删除名称中包含 "abc"的人
如果写成 
people = Person.objects.filter(name__contains="abc")
people.delete()
效果也是一样的,Django实际只执行一条 SQL 语句。
Django 模型中的CRUD的更多相关文章
- 如何在Django模型中管理并发性 orm select_for_update
		如何在Django模型中管理并发性 为单用户服务的桌面系统的日子已经过去了 - 网络应用程序现在正在为数百万用户提供服务,许多用户出现了广泛的新问题 - 并发问题. 在本文中,我将介绍在Django模 ... 
- Django模型中OneToOneField和ForeignKey的区别
		网上看到一篇讲解"Django模型中OneToOneField和ForeignKey区别" 的文章,浅显易懂; 可以把ForeignKey形象的类比为: ForeignKey是on ... 
- 如何让django模型中的字段和model名显示为中文
		如何让django模型中的字段和model名显示为中文:在模型中加入class Meta即可 class People(models.Model): name = models.CharField(n ... 
- django模型中的抽象类(abstract)
		首先介绍下django的模型有哪些属性:先看例子: Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.以下对此作一总结: abstract 这个属性是定义当前的模 ... 
- Django 模型中自定义Manager和模型方法
		1.自定义管理器(Manager) 在语句Book.objects.all()中,objects是一个特殊的属性,通过它来查询数据库,它就是模型的一个Manager. 每个Django模型至少有一个m ... 
- django模型中的关系对应
		显然,关系数据库的力量在于将表相互关联.Django提供了定义三种最常见的数据库关系类型的方法:多对一,多对多和一对一. 在说明之前,首先来理解一下这三个概念: 多对一: 两个集合a,b;集合a中的多 ... 
- django 模型中 class Meta 内 各种属性的用法
		Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.下面对此作一总结: abstract 这个属性是定义当前的模型类是不是一个抽象类.所谓抽象类是不会相应数据库表的 ... 
- Django 模型中FileField字段
		FileField¶ class FileField([upload_to=None, max_length=100, **options])¶ 一个上传文件的字段. 注意 FileField字段不支 ... 
- 在 django模型中封装元组和字典, 字段中使用chioce参数实现数据的一一对应
		一.models.py中 class OrderInfo(BaseModel): '''订单模型类''' # 封装一个字典, 便于在视图中取值, 进行比对 PAY_METHODS = { : &quo ... 
随机推荐
- 平衡二叉搜索树AVL
			package com.sunshine.AlgorithmTemplate; import com.sunshine.OFFER66_SECOND.BalanceTreeNode; import c ... 
- python 装饰器 第七步:带有参数的装饰器
			#第七步:带有参数的装饰器 #两个基本函数用同一个装饰器装饰 def outer(arg): print(arg) #这是装饰器的代码 def kuozhan(func): print(func) # ... 
- object of type 'Response' has no len()
			看见没,这里括号弄错了! 网上解释是requests.get()得到的是一个response对象,无法用BeautifulSoup解析,如果要解析,解析对象应该是requests.get().cont ... 
- go语言从例子开始之Example12.func函数
			函数 是 Go 的中心.我们将通过一些不同的例子来进行学习. Example: package main import "fmt" //定义一个函数使用关键字func //函数名名 ... 
- Oracle Linux下使用sqlplus的edit命令
			1.使当前会话生效 define_editor=vi SQL> select * from dual; D - X SQL> edit Wrote file afiedt.buf 21 1 ... 
- 42th-2
			''' 1, 元祖(2,3)'''def summ2(self, *args): '''这是一个求一系列数平方和的函数''' s = 0 for i in args: #历遍元 ... 
- 最近开发的项目,遇到用户上传excel文件并导入数据到系统这个需求,而有excel中有的单元格是日期格式,本文介绍怎么从excel中读取日期格式的数据。
			可以先判断单元格的类型,有的日期是字符串存储的,有的是按日期存储的(单元格按数字解析),代码如下: Cell cell = row.getCell(); Date date = null; if (c ... 
- Update Vim to 8.0 in Ubuntu
			add PPA sudo add-apt-repository ppa:jonathonf/vim Update and Install sudo apt-get update sudo apt-ge ... 
- 卸载Anaconda
			conda install anaconda-clean anaconda-clean --yes Anaconda 安装的时候在 .bash_profile中添加了变量: export PATH=& ... 
- 【leetcode】757. Set Intersection Size At Least Two
			题目如下: 解题思路:贪心算法.首先把intervals按第二个元素从小到大排序,然后遍历intervals,如果集合S和intervals[i]没有交集,那么把intervals[i]的最大值和次大 ... 
