zoukankan      html  css  js  c++  java
  • 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提供的addremoveclearset方法进行增删改查操作,参数可以为指定的字段值,也可以使用指定的对象作为参数

  • 相关阅读:
    AFNetWorking网络库教程
    安卓教程
    HTML5学习教程
    PHP学习教程汇总
    关于cocos2d-x 诸类的详解
    cocos2d-x 学习资料(很全)
    关于IOS开发知识的总结
    叶子效果
    ios后台下载
    ios中webservice报文的拼接
  • 原文地址:https://www.cnblogs.com/open-yang/p/11222307.html
Copyright © 2011-2022 走看看