ORM的记录添加和删除
记录查询包括:跨表查询(重点), 分组查询,聚合查询, F与Q查询
查询之前需要先添加数据:
一对多添加:
def addrecord(request):
Book.objects.create( title="py", price=111, pub_date="2012-12-12" (添加3个普通字段)
publish_id=1)
"_id" 是拼上去的,这是个特殊字段, publish是book的属性,这个字段关联到表Publish.
多对多添加:
主要是给第三张表加记录
book=Book.objects.create(.................) #先创建一条对象:
方式一:
alex=Author.objects.filter(name="Alex").first()
egon=Author.objects.filter(name="egon").first()
book.authors.add()
方式一是取出两个主键1,2然后和book拼
方式二:
book.authors.add(1,2) #直接添加Author表里对应的两个主键
方式三:(推荐的)
book.authors.add(*[1,2]) #把列表中的元素打散后再逐个添加
总结
添加表记录:
一对一和一对多,使用create方法。它有2种使用方法:
1. create(字段名1=值1...)。适用于表单添加操作!注意,这里面的字段名是ORM创建表之后的的字段名
比如: book类的publish属性,它是关联字段,ORM创建之后,字段名为publish_id
2.create(模型类属性1=值1...)。比如book类的publish属性,它是关联字段。
直接create(publish=obj1),注意,它接收一个model对象,对象包含了主键id
多对多使用add方法。add用2种使用方法:
1.add(obj1,obj2...) 它接收一个model对象,对象包含了主键id
2.add(主键id1,主键id2...) 它接收一个主键id。适用于表单添加操作!
还有一个python的打散语法,前面加一个*就可以了。比如*[1,2],它会依次调用前置方法,每次只取一个值。表单操作,会用到!
多对多解除绑定:
remove()方法
举例:删除python这本书的xiao作者
那么只需要删除book_authors表,id为1的这一条记录,就可以了
但是,不能直接对这张表,直接删除。因为它是2个表的关联表。
def add(request):
book = Book.objects.filter(id=3).first() # 先找到这本书
xiao = Author.objects.filter(name="xiao").first() # 再找到作者
book.authors.remove(xiao) # 解除绑定的关系
return HttpResponse('添加成功')
clear()清理所有关系对象
举例:将book_id等于3的所有的作者删除
上面的例子,用remove,可以将一个删除。如果这本书,有5个作者呢?
一个个remove?太累了!django提供了clear方法,可以清理所有关系对象。
def add(request):
book = Book.objects.filter(id=3).first()
book.authors.clear() # 清理所有关系对象
return HttpResponse('添加成功')
刷新页面,再次查看book_authors表记录,发现已经空了!
set([obj1,obj2....]) 先清空再设置
举例:
python这本书目前有3个作者,将wang设置为这本书的唯一作者
怎么做呢?将另外2个作者解除关系就可以了。
def add(request):
book = Book.objects.filter(id=3).first() # 先找到书
xiao = Author.objects.filter(name="xiao").first() # 再找到作者
zhang = Author.objects.filter(name="zhang").first()
book.authors.remove(xiao,zhang) # 解除绑定的关系 return HttpResponse('添加成功'
但是这样将2个作者解除,太麻烦了。
还有一种做法,先清空,再设置
def add(request):
book = Book.objects.filter(id=3).first() # 先找到书
book.authors.clear() # 清理所有关系对象
wang = Author.objects.filter(name="wang").first()
book.authors.add(wang) return HttpResponse('添加成功'
django提示了set方法,直接合并了先清空再设置的操作
它必须接收一个数组,因为可以接收多个值
def add(request):
book = Book.objects.filter(id=3).first() # 先找到书
wang = Author.objects.filter(name="wang").first() # 再找作者
book.authors.set([wang]) #先清空再设置 return HttpResponse('添加成功')
总结:
删除记录:
适用于一对一,一对多,多对一。
remove(obj1, obj2, ...) 去除多个关系对象。它需要指定一个或者多个对象
clear() 清理所有关系对象。不管现有的关系有多少,一律清空!
set([obj1,obj2...]) 先清空再设置。不管现有的关系有多少,一律清空再设置。适用于网页后台修改操作
ORM的记录添加和删除的更多相关文章
- 优化MVC,实现数据库表的记录的添加、删除、修改、查询。
一.在UserDAO里面重写实体user要调用的方法: 1.查询所有user表中的记录.用getAllUser()方法得到List public class UserDAO { public List ...
- python全栈开发day61-django简单的出版社网站展示,添加,删除,编辑(单表的增删改查)
day61 django内容回顾: 1. 下载: pip install django==1.11.14 pip install -i 源 django==1.11.14 pycharm 2. 创建项 ...
- Django实现简单的用户添加、删除、修改等功能
一. Django必要的知识点补充 1. templates和static文件夹及其配置 1.1 templates文件夹 所有的HTML文件默认都放在templates文件夹下. 1.2 stati ...
- mysql用户密码修改,用户添加、删除及设置权限
一下的示例所用用户名和密码为:test,111111 Mysql密码修改: Mysql修改密码需要root的权限,先执行mysql -uroot -p(密码); 1)使用set password方式来 ...
- LNMP添加、删除虚拟主机及伪静态使用教程
一般情况下每个虚拟主机就是一个网站,网站一般通过域名进行访问.LNMP 1.2的网站添加过程和LNMP 1.1的基本类似,但是增加了FTP和数据库的创建.LNMP1.2的防跨目录也由原来在php.in ...
- SQL语句的添加、删除、修改多种方法
SQL语句的添加.删除.修改虽然有如下很多种方法,但在使用过程中还是不够用,不知是否有高手把更多灵活的使用方法贡献出来? 添加.删除.修改使用db.Execute(Sql)命令执行操作╔------- ...
- ArcEngine查询、添加、删除要素的方法
原文 ArcEngine查询.添加.删除要素的方法 1.查找数据 1).利用FeaturCursor进行空间查询 //空间查询 ISpatialFilter spatialFilter = new S ...
- iptables 添加,删除,查看,修改
iptables是linux系统自带的防火墙,功能强大,学习起来需要一段时间,下面是一些习iptables的时候的记录.如果iptables不熟悉的话可以用apf,是一款基于iptables的防火 ...
- 跟我一起学extjs5(19--模块记录的拖放删除、拖放复制新增)
跟我一起学extjs5(19--模块记录的拖放删除.拖放复制新增) 网页其中的拖放(drag-drop)是比較有趣的操作,extjs5中非常好的封装了拖放的动作,也有各种类来支持,可是 ...
随机推荐
- WPF DataGrid支持的列类型
WPF DataGrid支持下面几种列类型: DataGridTextColumn DataGridCheckBoxColumn DataGridComboBoxColumn DataGridHype ...
- 数据绑定(七)使用ObjectDataProvider对象作为Binding的Source
原文:数据绑定(七)使用ObjectDataProvider对象作为Binding的Source ObjectDataProvider就是把对象作为数据源提供给Binding,类似的还有XmlData ...
- Linux参数调优
一.系统参数调优 打开文件 /etc/sysctl.conf ############ # 一般服务器调整 # ############ #最大连接数 net.core.somaxconn = 327 ...
- 【Windows10 IoT开发系列】API 移植工具
原文:[Windows10 IoT开发系列]API 移植工具 Windows 10 IoT Core 中是否提供你的当前 Win32 应用程序或库所依赖的 API? 如果不提供,是否存在可使用的等效 ...
- Windows 10 版本信息
原文 https://technet.microsoft.com/zh-cn/windows/release-info Windows 10 版本信息 Microsoft 已更新其服务模型. 半年频道 ...
- 从IntToHex()说起,栈/堆地址标准写法 good
学习中的一些牢骚.栈/堆地址标准写法. 2017-02-12 • 杂谈 • 暂无评论 • 老衲 •浏览 226 次 我一直都在寻找各种业务功能的最简单写法,用减法的模式来开发软件.下面是我的写法,如果 ...
- 用Go语言异常机制模拟TryCatch异常捕捉1
有的同学看到Go和TryCatch一起出现,心里可能会说,难道Go语言升级了,加入了try...catch语句.哈哈,其实Go语言从创建之初就没打算加入try...catch语句,因为创建Go的那帮大 ...
- win2003浏览器提示是否需要将当前访问的网站添加到自己信任的站点中去
Win2003的操作系统,的确比其它操作系统在安全上增加了不少,这是为用户所考虑的.当然,既然提供了安全性,尤其是在上网的时候,可以禁止某些活动脚本的显示,这样,就可以多方面的避免在使用Win2003 ...
- Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核
Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核 标签(空格分隔): Qemu ARM Linux 在上文<Qemu搭建ARM vexpress开发环 ...
- Netty源码分析--NIO(一)
好久没写博客了,最近打算花些时间把Netty的源码好好读一读,下面是本人在学习的过程中的一些笔记,不能确保自己思考的完全是正确的,如果有错误,欢迎大家指正. 由于本人的语文功底烂的很,通篇使用大白话来 ...