zoukankan      html  css  js  c++  java
  • Django day08 多表操作 (二) 添加表记录

    一: 一对多

      1. 一对多新增

    两种方式:  publish = 对象    publish_id = id

      1. publish_id 和 publish 的区别就是:
        1)publish_id 可以手动输入要查询的书籍的出版社 如: 方式一
        2)publish 要查询书籍出版社需要从数据库中取出出版社对象, 如: 方式二

    # 一对多新增数据
        # 添加一本北京出版社出版的书
        # 方式一
        ret = Book.objects.create(name='妈妈再爱我一次', price=25, publish_id=1)
        print(ret.name)
    
        # 方式二, 存对象publish=出版社的对象,存到数据库,是一个id
        # publish=Publish.objects.get(id=2)
        # publish=Publish.objects.get(pk=2)
        # pk 和 id 的作用一样,都是主键,可以通过主键查找,主键只有一个
        # 如果用filter 必须在后面加一个 .first()
        publish = Publish.objects.filter(pk=2).first()  # 从数据里面取出出版社对象
        ret = Book.objects.create(name='爸爸再爱我一次', price=35, publish=publish)
        print(ret.name)
    

          2. 一对多修改: 学习了单表操作,新增数据这一些,和修改数据是一个意思

    # 一对多修改数据
        # 方式一:
        book = Book.objects.get(pk=1)
        # book.publish=出版社对象
        book.publish_id = 2
        book.save()
    
        # 方式二
        # book=Book.objects.filter(pk=1).update(publish=出版社对象)
        # book=Book.objects.filter(pk=1).update(publish_id=1)

      3. 一对多删除: 删除数据就是直接删除就可以了,不过删除大数据要谨慎,能虚就虚,不然就要删库跑路了

    二: 多对多

      - 多对多常用的API

        # book_obj.authors.add() 添加
        # book_obj.authors.remove() 特定的关联对象从集合中去除, 比如说,移除某书籍的作者
        # book_obj.authors.clear() 清空所有书籍的作者
        # book_obj.authors.set() 先清空,再设置

     1. 多对多新增,add

     # 多对多新增(书籍跟作者的关系)
            # 1. 为妈妈再爱我一次这本书新增一个叫prince, bp 的作者
        # prince = Author.objects.filter(name='prince').first()  # 拿到作者这个对象
        # bp = Author.objects.filter(name='bp').first()  # 新增两个作者
        book = Book.objects.filter(name='妈妈再爱我一次').first()  # 要新增就要查到这本书
        # add 添加多个对象 对象用逗号隔开
        # book.author.add(prince, bp)  # 书籍表的authors
        # add 添加作者id
        book.author.add(1, 2)

     2. 多对多删除,remove

        # 多对多新增(书籍跟作者的关系)
        # prince = Author.objects.filter(name='prince').first()  # 拿到作者这个对象
        # book = Book.objects.filter(name='妈妈再爱我一次').first()  # 要新增就要查到这本书
        #
    
        # 删除 remove ,可以传对象, 可以传id, 也可以传多个,但不要混着用
        # 删除一个叫prince的作者
        # book.author.remove(prince)
        # book.author.remove(2)
        book.author.remove(1, 2)

    3. 清空, clear

     # 清空 clear,清空所有,不需要传参数
        book.author.clear()

    4. 先清空, 在新增 set

     # 先清空,在新增 set ,
        book.author.set(2)
    
     # 注意: 这样是错误的, 打印时会出现 TypeError: 'int' object is not iterable 这样的错误, 我们必须传一个可迭代的对象出来, 改成下面这样,就可以了
    # 要传一个列表,列表内可以是id, 也可以是对象
    book.author.set([2, ])

    2.

    2.

    2.

  • 相关阅读:
    redis——事务
    redis——队列
    linux安装mysql5.7
    转载:centos7yum默认为阿里云镜像
    redis——缓存穿透、缓存击穿、缓存雪崩
    redis——持久化
    redis——分布式锁
    并发编程实践
    Java并发包中线程同步器
    并发包中ScheduledThreadPoolExecutor
  • 原文地址:https://www.cnblogs.com/zedong/p/9951235.html
Copyright © 2011-2022 走看看