Django之ORM多表增删改操作
关系表的操作语句:
以上一节中创建的书籍、出版社、作者、作者信息表为例进行:
增:
# 一对一
# (1)类属性外键关联,使用外键约束属性直接进行对象关联插入
author_detail_obj=models.AuthorDetail.objects.get(id=4)
author_obj = models.Author.objects.create(author_name='脉动',author_birth='2010-10-10',author_detail=author_detail_obj)
# (2)外键关联的字段进行指定值插入
# author_obj = models.Author.objects.create(author_name='脉动', author_birth='2010-10-10',author_detail_id=4)
# 多对一
# (1)类属性外键关联,使用外键约束属性直接进行对象关联插入
publish_obj=models.Publish.objects.get(id=3)
book_obj=models.Book.objects.create(book_name='时光不散',book_price=22,book_publisher=publish_obj)
# (2)外键关联的字段进行指定值插入
# book_obj = models.Book.objects.create(book_name='时光不散', book_price=22, book_publisher=3)
# 多对多(基于对象)
author_obj1=models.Author.objects.get(id=1)
author_obj2=models.Author.objects.get(id=3)
book_obj=models.Book.objects.get(book_name='小时光')
# (1)调用对象属性的方法传入关联对象进行插入
book_obj.author.add(author_obj1,author_obj2)
# (2)调用对象属性的方法直接传入id进行插入
# book_obj.author.add(1,3)
# book_obj.author.add(*[1,3])
删(多表关联是默认都是级联删除,和单表的删除操作一样直接删):
# 一对一
models.Author.objects.filter(author_name='无名').first().delete()
# 多对一
models.Book.objects.filter(book_name='完美世界').delete()
# 多对多(基于对象)
author_obj1=models.Author.objects.get(pk=1)
author_obj2= models.Author.objects.get(author_name='差不多先生')
book_obj=models.Book.objects.filter(book_name='小时光')[0]
#remove指定删除
# (1)使用remove传递对象参数
book_obj.author.remove(author_obj1,author_obj2)
# (2)使用remove传递字段参数
# book_obj.author.remove(author_obj1.id, author_obj2.id)
# book_obj.author.remove(1,2)
# book_obj.author.remove(*[1,2])
# clear直接清除所有
book_obj.author.clear()
改:
# 一对一
models.Author.objects.filter(author_name='差不多先生').update(author_name='金庸')
# 多对一
models.Book.objects.filter(book_price=22).update(book_price=11)
# 多对多(基于对象)
book_obj=models.Book.objects.get(id=5)
# 先清除再设置(set只能给一个参数,数字或者字符型数字均可)
book_obj.author.set([1,2,'7'])
在多表增删改操作中,一对一和多对一关系表与单表的操作一样;多对多(自动创建的第三张表)都是基于对象操作,使用多对多约束的属性(第三张表)调用orm提供的add、remove、clear、set方法进行增删改查操作,参数可以为指定的字段值,也可以使用指定的对象作为参数
Django之ORM多表增删改操作的更多相关文章
- ORM多表增删改查
一 创建多表 在models.py里创建4张表:Author(作者).AuthorDetail(作者详细信息).Publish(出版社).Book(书) 四张表关系为: (1)首先创建一对一关系.On ...
- day 69 ORM 多表增删改查操作
http://www.cnblogs.com/liwenzhou/p/8660826.html 下面的代码是在 python console中配置的. 关闭pycharm会消失. from app01 ...
- Django - 基于orm实现用户增删改查
1.基于orm实现用户新增 user_info.html中,增加代码: views.py中,在原user_info函数中,增加判断代码: 备注:最后一句,可以通过return redirect 实现, ...
- Django框架(九)—— 单表增删改查,在Python脚本中调用Django环境
目录 单表增删改查,在Python脚本中调用Django环境 一.数据库连接配置 二.orm创建表和字段 三.单表增删改查 1.增加数据 2.删除数据 3.修改数据 4.查询数据 四.在Python脚 ...
- Django项目的创建与介绍.应用的创建与介绍.启动项目.pycharm创建启动项目.生命周期.三件套.静态文件.请求及数据.配置Mysql完成数据迁移.单表ORM记录的增删改查
一.Django项目的创建与介绍 ''' 安装Django #在cmd中输入pip3 #出现这个错误Fatal error in launcher: Unable to create process ...
- ORM之单表增删改查
ORM之单表增删改查 在函数前,先导入要操作的数据库表模块,model from model所在的路径文件夹 import model 在views文件中,加的路径: #就一个app01功能的文件 ...
- [Django框架 - 静态文件配置、request对象方法初识、 pycharm链接数据库、ORM实操增删改查、django请求生命周期]
[Django框架 - 静态文件配置.request对象方法初识. pycharm链接数据库.ORM实操增删改查.django请求生命周期] 我们将html文件默认都放在templates文件夹下 将 ...
- Django框架(八)--单表增删改查,在Python脚本中调用Django环境
一.数据库连接配置 如果连接的是pycharm默认的Sqlite,不用改动,使用默认配置即可 如果连接mysql,需要在配置文件中的setting中进行配置: 将DATABASES={} 更新为 DA ...
- OracleHelper(对增删改查分页查询操作进行了面向对象的封装,对批量增删改操作的事务封装)
公司的一个新项目使用ASP.NET MVC开发,经理让我写个OracleHelper,我从网上找了一个比较全的OracleHelper类,缺点是查询的时候返回DataSet,数据增删改要写很多代码(当 ...
随机推荐
- JDK 14的新特性:更加好用的NullPointerExceptions
JDK 14的新特性:更加好用的NullPointerExceptions 让99%的java程序员都头痛的异常就是NullPointerExceptions了.NullPointerExceptio ...
- Spring5参考指南: Resources
文章目录 内置Resource实现 ResourceLoader ResourceLoaderAware 资源作为依赖 构造ClassPathXmlApplicationContext-快捷方式 资源 ...
- 解决Vue-cli3.0下scss文件编译过慢、卡顿问题
在使用Vue-cli 3.0构建的项目中,可能存在项目编译过慢的问题,具体表现在编译时会在某一进度比如40%时停顿,等好一会儿才能够编译完成.这使得浏览器中的实时预览也会卡顿,不利于我们快速查看效果, ...
- 翻译 - Kafka Streams 介绍(一)
2019独角兽企业重金招聘Python工程师标准>>> 资料 [原文地址](http://kafka.apache.org/11/documentation/streams/) 正文 ...
- JAVA编程思想 Ch3.5题
练习5:创建一个class类,包含连两个String字段 :name.says.在main方法中创建两个Dog方法 一个命名为spot 叫声为 Ruff,另一个命民为scruffy,叫声为:Wuff: ...
- 带权并查集--hdu3047 ZJnu stadium
题意:给出一个n,m,n表示的是有n 个人,m表示的是 有m 对关系: 接下来输入的就是这m对关系,a,b,x:表示的是a,b相距x个距离:然后判断输入的是否与这个数的上面的数信息一致, 输出不一致的 ...
- USACO Training Section 1.1 贪婪的送礼者Greedy Gift Givers
P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers 题目描述 对于一群(NP个)要互送礼物的朋友,GY要确定每个人送出的钱比收到的多多少.在这一个问题中,每个人都准备了一 ...
- codeforce 272E Dima and Horses (假DFS)
E. Dima and Horses Dima came to the horse land. There are n horses living in the land. Each horse in ...
- Pandas切片操作:很容易忽视的SettingWithCopyWarning
Pandas是一个强大的分析结构化数据的工具集,主要用于数据挖掘和数据分析,同时也提供数据清洗功能. 很多初学者在数据的选取,修改和切片时经常面临一些困惑.这是因为Pandas提供了太多方法可以做同样 ...
- python恺撒密码 与 字符串反码 【chr()与ord()函数的两种不同应用】
恺撒密码 描述 恺撒密码是古罗马凯撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下: ...