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="",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 增删改的更多相关文章
- django -- ORM实现图书增删改查
表结构设计 上篇我们实现了出版社的增删改查,出版社数据表有两个字段id和name,那图书的表结构怎么设计呢?图书也要有一个主键id,还要有一个名称title,是哪个出版社的,要有个字段press和Pr ...
- django -- ORM实现出版社增删改查
前戏 我们来完成一个图书管理系统的增删改查 表结构设计 1. 出版社 id name 2. 作者 id name 3. 书 id title 出版社_id 4. 作者_书_关系表 id 书 ...
- django -- ORM实现作者增删改查
前戏 前面我们已经实现了出版社的增删改查,书的增删改查,书和出版社的对应关系.现在来写一下作者的增删改查和书的对应关系,那书和作者有什么关系呢?一个作者可以写多本书,一本书可以有多个作者,所以书和作者 ...
- Django ORM记录的增删改查结合web端
模版语法分配变量 在views.py文件中定义一个视图函数show_data: def show_data(request): # 定义一个字典 并将它展示在前端HTML文件 user_dic = { ...
- 10.Django数据库操作(增删改)
插入数据 命令:create 或者 save create用法:ModelName.objects.create(itemName="itemValue") save用法:mode ...
- [Django框架 - 静态文件配置、request对象方法初识、 pycharm链接数据库、ORM实操增删改查、django请求生命周期]
[Django框架 - 静态文件配置.request对象方法初识. pycharm链接数据库.ORM实操增删改查.django请求生命周期] 我们将html文件默认都放在templates文件夹下 将 ...
- Django项目的创建与介绍.应用的创建与介绍.启动项目.pycharm创建启动项目.生命周期.三件套.静态文件.请求及数据.配置Mysql完成数据迁移.单表ORM记录的增删改查
一.Django项目的创建与介绍 ''' 安装Django #在cmd中输入pip3 #出现这个错误Fatal error in launcher: Unable to create process ...
- [oldboy-django][2深入django]ORM操作
推荐学习博客:http://www.cnblogs.com/wupeiqi/articles/6216618.html 需求: 汇总django orm操作,代替原生mysql语句来操作数据库:里面内 ...
- 利用Django提供的ModelForm增删改数据
上一篇我们写了Django基于类如何增删改数据的方法,方法虽然简单,但新手可能对其原理不是很清楚,那么我们这次就用Django提供的ModelForm方法来实现增删改数据,这是一种基于现有模型的增删改 ...
随机推荐
- OPC协议解析-OPC客户端与服务器通讯解析
1 OPC服务器 OPC服务器, 是指按照OPC基金组织规定的OPC规范群开发的软件驱动.OPC服务器作为中间媒介负责从数据源读取数据再跟另外一端的客户端通信.在 OPC客户端/服务器 的结 ...
- (简单)华为荣耀9i LLD-AL20的Usb调试模式在哪里开启的方法
每当我们使用pc通过数据线连接上安卓手机的时候,如果手机没有开启Usb开发者调试模式,pc则没法成功检测到我们的手机,有时,我们使用的一些功能较好的应用如以前我们使用的一个应用引号精灵,老版本就需要开 ...
- C#的String.Split 分割字符串用法详解的代码
代码期间,把代码过程经常用的内容做个珍藏,下边代码是关于C#的String.Split 分割字符串用法详解的代码,应该对码农们有些用途. 1) public string[] Split(params ...
- [Python][Scrapy 框架] Python3 Scrapy的安装
1.方法(只介绍 pip 方式安装) PS.不清楚 pip(easy_install) 可以百度或留言. cmd命令: (直接可以 pip,而不用跳转到 pip.exe目录下,是因为把所在目录加入 P ...
- DVWA 黑客攻防演练(六)不安全的验证码 Insecure CAPTCHA
之前在 CSRF 攻击 的那篇文章的最后,我觉得可以用验证码提高攻击的难度. 若有验证码的话,就比较难被攻击者利用 XSS 漏洞进行的 CSRF 攻击了,因为要识别验证码起码要调用api,跨域会被浏览 ...
- ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门
一.前言 1.本教程主要内容 ASP.NET Core MVC控制器简介 ASP.NET Core MVC控制器操作简介 ASP.NET Core MVC控制器操作简介返回类型简介 ASP.NET C ...
- 挖一挖MongoDB的备份与还原(实现指定时间点还原和增量备份还原)
一 研究背景需求 目前作者所在公司的MongoDB数据库是每天凌晨做一次全库完整备份,但数据库出现故障时,只能保证恢复到全备时间点,比如,00:30 做的完整备份,而出现故障是下午18:00,那么现 ...
- 简说raid1 raid2 raid5 raid6 raid10的优缺点和做各自raid需要几块硬盘
Raid 0:一块硬盘或者以上就可做raid0优势:数据读取写入最快,最大优势提高硬盘容量,比如3快80G的硬盘做raid0 可用总容量为240G.速度是一样.缺点:无冗余能力,一块硬盘损坏,数据全无 ...
- 公共的JS组件-告别CURD
urls.py urlpatterns = [ url('^asset.html$', views.AssetView.as_view()), url('^asset-json.html$', vie ...
- 第三节 pandas续集
import pandas as pd from pandas import Series from pandas import DataFrame import numpy as np 一 创建多层 ...