增删改

增加

表对象直接增加方式

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="",publish=pub_obj)

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

models.Book.objects.create(title="追风筝的人",publishDdata="2015-5-8",price="",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="",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="", 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:不用查,直接把数据都清空

Django ORM 操作2 增删改的更多相关文章

  1. django -- ORM实现图书增删改查

    表结构设计 上篇我们实现了出版社的增删改查,出版社数据表有两个字段id和name,那图书的表结构怎么设计呢?图书也要有一个主键id,还要有一个名称title,是哪个出版社的,要有个字段press和Pr ...

  2. django -- ORM实现出版社增删改查

    前戏 我们来完成一个图书管理系统的增删改查 表结构设计 1. 出版社 id   name 2. 作者 id  name 3. 书 id  title  出版社_id 4. 作者_书_关系表 id  书 ...

  3. django -- ORM实现作者增删改查

    前戏 前面我们已经实现了出版社的增删改查,书的增删改查,书和出版社的对应关系.现在来写一下作者的增删改查和书的对应关系,那书和作者有什么关系呢?一个作者可以写多本书,一本书可以有多个作者,所以书和作者 ...

  4. Django ORM记录的增删改查结合web端

    模版语法分配变量 在views.py文件中定义一个视图函数show_data: def show_data(request): # 定义一个字典 并将它展示在前端HTML文件 user_dic = { ...

  5. 10.Django数据库操作(增删改)

    插入数据 命令:create 或者 save create用法:ModelName.objects.create(itemName="itemValue") save用法:mode ...

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

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

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

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

  8. [oldboy-django][2深入django]ORM操作

    推荐学习博客:http://www.cnblogs.com/wupeiqi/articles/6216618.html 需求: 汇总django orm操作,代替原生mysql语句来操作数据库:里面内 ...

  9. 利用Django提供的ModelForm增删改数据

    上一篇我们写了Django基于类如何增删改数据的方法,方法虽然简单,但新手可能对其原理不是很清楚,那么我们这次就用Django提供的ModelForm方法来实现增删改数据,这是一种基于现有模型的增删改 ...

随机推荐

  1. Dynamics 365 CE中AsyncOperationBase表记录太多,影响系统性能怎么办?

    微软动态CRM专家罗勇 ,回复311或者20190311可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 本文主要是根据微软官 ...

  2. 参观微软Serbia开发中心和Office365 2019-01-31活动感悟

    这是<国外线下技术俱乐部建设>系列文章之一.   该活动网址是:https://www.meetup.com/ITPro-Serbia/events/258352104/ 活动内容是讲Of ...

  3. java体系结构与工作方式 《深入分析java web 技术内幕》第七章

    java体系结构与工作方式 7.1 JVM体系结构 何谓JVM JVM(Java Virtual Machine) 通过模拟一个计算机来达到一个计算机所具有的计算功能 指令集:计算机所能识别的机器语言 ...

  4. MongoDB基础学习

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  5. https协议详解

    HTTPS协议建立过程 1) 客户端首次发送请求时,由于客户端(浏览器等)对一些加解密算法的支持程度不一样,但是在TLS传输中必须使用相同的加解密算法,所以在TLS握手的阶段,客户端告诉服务器端自己支 ...

  6. Windows 下端口被占用

    0. 参考 参考链接:  Windows下如何查看某个端口被谁占用 1. 遇到的问题 在 Windows 下的 IDEA 中启动 Web 服务显示 8080 端口被占用,程序无法正确启动. 2. 解决 ...

  7. phpstorm ftp主动模式能连接上,但获取不到目录;

    前面一直都在使用ST做开发,但是也想试试传说中的phpstorm神器.一切都弄好了,想使用它的远程开发功能,省去我本地开发然后再ftp上传做法. 但是却遇到了这个问题,困扰了我三四天!!!我各种百度都 ...

  8. Java开发学习心得(一):SSM环境搭建

    目录 Java开发学习心得(一):SSM环境搭建 1 SSM框架 1.1 Spring Framework 1.2 Spring MVC Java开发学习心得(一):SSM环境搭建 有一点.NET的开 ...

  9. xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH ​

    xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH ...

  10. (十四)Exploring Your Data

    Sample Dataset Now that we’ve gotten a glimpse of the basics, let’s try to work on a more realistic ...