zoukankan      html  css  js  c++  java
  • ORM-增/删/改(多表)

    1增

    1.1 一对一

    #方式一:
    obj = models.DetailAuthorInfo.objects.create(
         d_birth='1993-02-24',
         d_telepho='13952551087',
         d_addr='江西省赣州市'
     )
     models.Author.objects.create(
         a_name='Paul',
         a_age=30,
         authorDetail=obj
     )
    #方式二:
         obj = models.DetailAuthorInfo.objects.filter(d_addr='青海省').last()
         models.Author.objects.create(
             a_name='老狼',
             a_age=45,
             authorDetail_id=obj.d_id
        )
    

    1.2 一对多(同理也有两种方式)

    obj = models.Publisher.objects.get(p_id=3)
    models.Book.objects.create(
        b_date='1999-09-09',
        b_price=67.34,
        b_title='春天里的故事',
        publish_id=obj.p_id
    )
    

    1.3 多对多(同理也有两种方式)

    '''方式一'''
    obj = models.Book.objects.filter(b_title='春天里的故事')[0]
    obj.authors.add(*[1,2,3])
    '''方式二'''
    book_obj = models.Book.objects.get(b_id=1)
    authors1 = models.Author.objects.get(a_id=2)
    authors2 = models.Author.objects.get(a_id=4)
    book_obj.authors.add(*[authors1, authors2])
    

    2删

    2.1 一对一(分两种情况)

    # 表一外键关联到表二,表一删除,不影响表2,表2删除会影响表1
    # 删寄生物(Author),不影响宿主(DetailAuthor)
    models.Author.objects.get(a_id=1).delete() #情况一(删寄生虫)
    models.DetailAuthorInfo.objects.get(d_id=2).delete()  #情况二(删宿主)
    

    2.2 一对多

    models.Publisher.objects.get(p_id=1).delete()  #它是大腿,删除它,会影响其他表
    models.Book.objects.filter(b_title__startswith='哈利波特').delete()  #删除它,不会影响其他表
    

    2.3 多对多

    # 多对多
    obj = models.Book.objects.get(b_id=6)
    #.remove可以一次性删除一个或多个
    obj.authors.remove(3)
    obj.authors.remove(*[3,4])
    obj.authors.clear()
    
    obj.authors.add(*[3,])
    #.set删除后载更新
    obj.authors.set('4')
    obj.authors.set(['5', '6'])
    

    3 该(更新)

    3.1 一对一

    # 一对一,可以全部更新,也可以部分更新
    models.Author.objects.filter(a_id=5).update(
        a_name = 'Curry',
        a_age = 32,
        authorDetail_id = 1,
    )
    

    3.2 一对多

    # 一对多,可以全部更新,也可以部分更新
    models.Book.objects.filter(b_id=7).update(
        b_title = '我是谁,我在哪里?',
        publish_id = 2,
    )
    # 因为级联,所以不能更改
    '''
    models.Publisher.objects.filter(p_id=2).update(
      p_id = 666,
    )'''
    
    

    3.3.3 多对多

    .set(同上)

  • 相关阅读:
    微信开发笔记-调用自定义分享接口
    应试教育
    AJAX学习笔记
    日志管理-Log4net
    linq学习笔记
    委托学习笔记后续:泛型委托及委托中所涉及到匿名方法、Lambda表达式
    Webservice服务创建、调用笔记
    设计模式(23)---迭代器模式
    设计模式(22)---备忘录模式
    设计模式(21)---访问者模式
  • 原文地址:https://www.cnblogs.com/messi-mu/p/14267196.html
Copyright © 2011-2022 走看看