zoukankan      html  css  js  c++  java
  • Django ORM 操作2 增删改

    增删改

    增加

    表对象直接增加方式

    Frank_obj = models.Student(name ="海东",course="python",birth="2000-9-9",fenshu=80)
    Frank_obj.save()

    create 增加方式

    单表增加 直接带值即可

     models.Student.objects.create(name ="海燕",course="python",birth="1995-5-9",fenshu=88)

    含有一对多,一对一字段的添加要传入对应对象

      ps:create 方法的返回值为被创建的对象 

    pub_obj = models.Publish.objects.filter(name="人民出版社")[0]
    print(pub_obj)
    models.Book.objects.create(title = "简爱",publishDdata="2000-6-6",price="222",publish=pub_obj)

    含有一对多,一对一字段,在知道关联字段的值前提下也可以直接带值

    models.Book.objects.create(title="追风筝的人",publishDdata="2015-5-8",price="111",publish_id=1)

     add 方式

    含有 多对多 字段时,依旧是要传入对象,用 add 添加绑定关系

    # 先创建一本书:
        pub_obj=models.Publish.objects.filter(name="万能出版社").first()
        book_obj = models.Book.objects.create(title="醉玲珑",publishDdata="2015-4-10",price="222",publish=pub_obj)
        
    # #通过作者的名字django默认找到id haiyan_obj = models.Author.objects.filter(name="haiyan")[0] egon_obj = models.Author.objects.filter(name="egon")[0] xiaoxiao_obj = models.Author.objects.filter(name="xiaoxiao")[0]
    # 绑定多对多的关系、 book_obj.authorlist.add(haiyan_obj, egon_obj, xiaoxiao_obj)

    含有 多对多 字段,add 支持传入序列然后打散的方式绑定

       pub_obj = models.Publish.objects.filter(name="万能出版社").first()
        book_obj = models.Book.objects.create(title="醉玲珑", publishDdata="2015-4-10", price="222", publish=pub_obj)
        authers = models.Author.objects.all()
    
    # 绑定多对多关系 book_obj.authorlist.add(*authers)

    update_or_create 方式

    有的话更新,没有的话就创建

    UserToken.objects.update_or_create(user=user_obj,defaults={"token":token})

    bulk_create() 方式

    Django model中数据批量导入

    常规方法,影响性能

    for i in resultlist:
        p = Account(name=i) 
        p.save()

    批量方法,更加方便

    querysetlist=[]
    for i in resultlist:
        querysetlist.append(Account(name=i))        
    Account.objects.bulk_create(querysetlist)

    修改

    对象修改

    对象直接 对象.属性 赋值修改,修改后需要 save()

    book_obj = models.Book.objects.first()
    book_obj.title = "lalal"
    book_obj.save()

    queryset 对象 update 修改

    queryset 对象使用 update(属性="值")方法更改,不需要 save() 

      ps:update 返回值为受影响的行数

    book_obj = models.Book.objects.filter(id=1)
    book_obj.update(title="keke")
    print(book_obj.values("title")[0])  # {'title': 'keke'}

    多对多字段修改,set 方法 修改管理字段

    book_obj = models.Book.objects.first()
    book_obj.authors.set([2, 3])

    删除

    delete 方法

    删除方法就是 delete(),它运行时立即删除对象而不返回任何值。

      ps: delete方法删除是具有关联性的,默认会全部删除,可以在管理字段通过 on_delete 属性定制

    # 删除数据
    models.Student.objects.filter(nid=id).delete()

    删除可以一次性删除多条记录

    Entry.objects.filter(pub_date__year=2005).delete()

     remove 和 clean 方法

    remove 和 clean 方法仅使用于在多对多字段中解除关系所用

    # 解除多对多的关系(remove)
    book_obj=models.Book.objects.filter(title="醉玲珑").last()  # 找到书对象
    authers=models.Author.objects.filter(id__lt=3)   # 找到符合条件的作者对象
    book_obj.authorlist.remove(*authers)  # 因为清除的是多条,得加个*
    # 清除关系方法(clear)
    book_obj= models.Book.objects.filter(title="红楼梦")
    for book_obj_item in book_obj: # 把所有红楼梦的都给清空了
      book_obj_item.authorlist.clear()

    区别:

      remove:得吧要清除的数据筛选出来,然后移除
      clear:不用查,直接把数据都清空

  • 相关阅读:
    Kubernetes1.91(K8s)安装部署过程(一)--证书安装
    开源仓库Harbor搭建及配置过程
    有关centos7 图形化root用户登录
    linux服务器查看tcp链接shell
    django表格form无法保存评论排查步骤
    Redis 4.x 安装及 发布/订阅实践和数据持久化设置
    django博客项目-设置django为中文语言
    windows 环境下如何使用virtualenv python环境管理工具
    【转载】python中利用smtplib发送邮件的3中方式 普通/ssl/tls
    php安装phpize工具
  • 原文地址:https://www.cnblogs.com/shijieli/p/10349540.html
Copyright © 2011-2022 走看看