Django中orm的双重方法

orm中的双重方法

更新或创建

 Draw2DDevice.objects.update_or_create(
                    defaults={'x': 777, 'y': 777,}, device_id=13, version_id=1)

defaults是需要更新的数据字典,后面参数是用来查询的是否存在的,如果存在就更新,反之创建

查询或创建

get_or_create 是查找对象的一种便捷方法, 其最大的功能点是在目标对象不存在的时候, 可以根据参数创建对象。

它实际上返回一个 (object, created)元祖,第一个元素是您要检索 get 的模型的实例,第二个元素是个是否创建的布尔值,用户判断实例是否是创建的。

如果实例已经存在数据库中, 并且通过参数可以找到, 那么 created 为 False, 反之则会创建, created 为 True。

user, b = User.objects.get_or_create(u_id=1, name="张三", defaults={'address':'上海'})
print(user)

等同于

users = User.objects.filter(u_id=1, name="张三").first()
if user:
    print(user)
else:
    user = User.objects.create(u_id=1, name="张三", address="上海")
    print(user)
  • **kwargs,数据的查询条件。
  • defaults,如果没有查到数据,创建数据时提供的填充数据。

注意事项

这个方法不是 原子的,如果并发操作会出现问题

Original: https://www.cnblogs.com/zonghan/p/16567287.html
Author: zong涵
Title: Django中orm的双重方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611315/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • uniapp封装request请求,常用公共函数等,非常实用

    1、项目目录如下图,utils目录下的文件和main.js文件在下面可以直接下载使用 2、demo案例,前端代码 php;gutter:true; export default {…

    Linux 2023年6月7日
    0106
  • Kubernetes中的网络

    一、引子 既然Kubernetes中将容器的联网通过插件的方式来实现,那么该如何解决这个的联网问题呢? 如果你在本地单台机器上运行docker容器的话注意到所有容器都会处在 doc…

    Linux 2023年6月14日
    096
  • CentOS导入CA证书

    把CA证书放到如下目录 /etc/pki/ca-trust/source/anchors 再命令行运行 /bin/update-ca-trust 如下所示的操作步骤 删除证书只需要…

    Linux 2023年6月6日
    096
  • redis主从复制

    Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 特性: 运行在内存中的数据集工作方式 支持多种数据结构 提供不同级别的磁盘持…

    Linux 2023年5月28日
    084
  • 三、Linux基础命令

    查看文件[root@node01 ~]# lsanaconda-ks.cfg Desktop Documents Downloads initial-setup-ks.cfg Mu…

    Linux 2023年6月7日
    074
  • Golang 实现 Redis(9): 使用GeoHash 搜索附近的人

    本文是使用 golang 实现 redis 系列的第九篇,主要介绍如何使用 GeoHash 实现搜索附近的人。 搜索附近的POI是一个非常常见的功能,它的技术难点在于地理位置是二维…

    Linux 2023年5月28日
    0117
  • 资源笔记

    Spring Cloud Stream中文指导文档 Original: https://www.cnblogs.com/iforeverhz/p/16274259.htmlAuth…

    Linux 2023年6月7日
    0118
  • Android:Jetpack之视图绑定——ViewBinding

    1.Jetpack简介 手机厂商还没卷完Android 12, Android 13就悄然声息地来了,距离Google 2008年9月22日发布Android 1.0,已过去13个…

    Linux 2023年6月13日
    0104
  • Linux下的文件打包与解压

    tar的命令只用来打包文件,如需要压缩文件就需要调用参数来实现 -c 建立新的&#x…

    Linux 2023年5月27日
    0110
  • goroutine 和 channel

    应用 实例1 go;collapse:true;;gutter:true; package main</p> <p>import ( "fmt&q…

    Linux 2023年6月8日
    090
  • Linux目录标签概览

    根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的,同时根目录也与开机/还原/系统修复等动作有关。由于系统开机时需要特定的开机软件、核心文件、开机所需程序、…

    Linux 2023年6月8日
    084
  • Shading-JDBC、ShadingSphere、ShardingProxy 使用详解

    ShadingSphere ​ShardingSphere是一款起源于当当网内部的应用框架,2015年在当当网内部诞生,2016年由主要开发人员张亮带入京东数科,在国内经历了当当网…

    Linux 2023年6月6日
    0145
  • [编译] 8、在Linux下搭建 stm8 单片机的开发烧写环境(makefile版)

    一、SDCC(Small Device C Compiler)编译环境搭建 1.1、下载 1.2、编译 1.3、测试 二、Hex2Bin+命令行烧写工具配置使用 2.1、下载工具安…

    Linux 2023年6月8日
    0127
  • [云计算]腾讯云从业者认证-思维导图

    第一章 云计算基础介绍 第二章 腾讯云服务器产品介绍 第三章 腾讯云网络产品介绍 第四章 腾讯云CDN加速产品介绍 第五章 腾讯云存储产品介绍 第六章 腾讯云数据库产品介绍 第七章…

    Linux 2023年6月13日
    0124
  • bash 教程-5 shell 流程控制 条件判断 重定向 read [MD]

    我的GitHub 我的博客 我的微信 我的邮箱 bqt20094 baiqiantao@sina.com 流程控制 if commands; then commands [elif…

    Linux 2023年5月28日
    0129
  • golang的超时处理使用技巧

    大家知道Select 是 Go 中的一个控制结构,每个 case 必须是一个通信操作,要么是发送要么是接收操作。 select是 随机执行一个可运行的 case。 如果没有 cas…

    Linux 2023年6月6日
    075
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球