关系表的操作语句:

以上一节中创建的书籍、出版社、作者、作者信息表为例进行:

增:

# 一对一

# (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多表增删改操作的更多相关文章

  1. ORM多表增删改查

    一 创建多表 在models.py里创建4张表:Author(作者).AuthorDetail(作者详细信息).Publish(出版社).Book(书) 四张表关系为: (1)首先创建一对一关系.On ...

  2. day 69 ORM 多表增删改查操作

    http://www.cnblogs.com/liwenzhou/p/8660826.html 下面的代码是在 python console中配置的. 关闭pycharm会消失. from app01 ...

  3. Django - 基于orm实现用户增删改查

    1.基于orm实现用户新增 user_info.html中,增加代码: views.py中,在原user_info函数中,增加判断代码: 备注:最后一句,可以通过return redirect 实现, ...

  4. Django框架(九)—— 单表增删改查,在Python脚本中调用Django环境

    目录 单表增删改查,在Python脚本中调用Django环境 一.数据库连接配置 二.orm创建表和字段 三.单表增删改查 1.增加数据 2.删除数据 3.修改数据 4.查询数据 四.在Python脚 ...

  5. Django项目的创建与介绍.应用的创建与介绍.启动项目.pycharm创建启动项目.生命周期.三件套.静态文件.请求及数据.配置Mysql完成数据迁移.单表ORM记录的增删改查

    一.Django项目的创建与介绍 ''' 安装Django #在cmd中输入pip3 #出现这个错误Fatal error in launcher: Unable to create process ...

  6. ORM之单表增删改查

    ORM之单表增删改查 在函数前,先导入要操作的数据库表模块,model from model所在的路径文件夹 import model   在views文件中,加的路径: #就一个app01功能的文件 ...

  7. [Django框架 - 静态文件配置、request对象方法初识、 pycharm链接数据库、ORM实操增删改查、django请求生命周期]

    [Django框架 - 静态文件配置.request对象方法初识. pycharm链接数据库.ORM实操增删改查.django请求生命周期] 我们将html文件默认都放在templates文件夹下 将 ...

  8. Django框架(八)--单表增删改查,在Python脚本中调用Django环境

    一.数据库连接配置 如果连接的是pycharm默认的Sqlite,不用改动,使用默认配置即可 如果连接mysql,需要在配置文件中的setting中进行配置: 将DATABASES={} 更新为 DA ...

  9. OracleHelper(对增删改查分页查询操作进行了面向对象的封装,对批量增删改操作的事务封装)

    公司的一个新项目使用ASP.NET MVC开发,经理让我写个OracleHelper,我从网上找了一个比较全的OracleHelper类,缺点是查询的时候返回DataSet,数据增删改要写很多代码(当 ...

随机推荐

  1. mac使用brew安装mysql5.7

    安装mysql5.7 brew install mysql@5.7 设置环境变量(可能安装完自动生成过了,可以cat ~/.zshrc看一下,有了就不用添加了 ) echo 'export PATH= ...

  2. umditor删除域名,配置为绝对路径

    getAllPic: function (sel, $w, editor) { var me = this, arr = [], $imgs = $(sel, $w); $.each($imgs, f ...

  3. python 开发一款图片压缩工具(四):上传图床

    上一篇使用了 pngquant 图片压缩工具进行压缩,并通过 click 命令行工具构建了 picom 包.这篇的主要功能是实现图片上传. 图片上传功能的实现 通过 pngquant 压缩图片后,得到 ...

  4. awk,seq,xarg实例使用

    基于https://www.cnblogs.com/wangyuebo/p/5836933.html的详细补充讲解 [root@localhost awk]# seq 10|xargs -n 2 &g ...

  5. Pascal 字符串

    Dancing with Strings http://baskent.edu.tr/~tkaracay/etudio/ders/prg/pascal/PasHTM1/pas/pasl1007.htm ...

  6. java基础问题 (待解决)

    (1)接口与抽象类的区别? (2)Java中的异常有哪几类?分别怎么使用? (3)常用的集合类有哪些?比如List如何排序? (4)ArrayList和LinkedList内部的实现大致是怎样的?他们 ...

  7. 第三方库 正则表达式re模块

    正则表通常被用来检索.替换那些符合某个模式(规则)的文本. 正则表达式通常缩写成“regex”,单数有regexp.regex,复数有regexps.regexes.regexen. 正则表达式是对字 ...

  8. codeforce 1311 D. Three Integers

    In one move, you can add +1 or −1 to any of these integers (i.e. increase or decrease any number by ...

  9. 【原创】Linux Mutex机制分析

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  10. D. Equalize the Remainders set的使用+思维

    D. Equalize the Remainders set的学习::https://blog.csdn.net/byn12345/article/details/79523516 注意set的end ...