首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

类似于`get_or_create`的Django `get_or_build`?

get_or_build是一个类似于get_or_create的自定义函数,用于在Django中获取现有对象或创建新对象。与get_or_create不同的是,get_or_build函数在获取对象时,如果对象不存在,不会立即创建新对象,而是返回一个未保存的新对象实例。

以下是get_or_build函数的实现示例:

代码语言:txt
复制
def get_or_build(model, **kwargs):
    try:
        return model.objects.get(**kwargs), False
    except model.DoesNotExist:
        obj = model(**kwargs)
        return obj, True

使用示例:

代码语言:txt
复制
user, created = get_or_build(User, username='john')

在上述示例中,get_or_build函数尝试通过username字段获取User模型的现有对象。如果对象存在,则返回该对象和False;如果对象不存在,则创建一个未保存的新对象,并返回该对象和True

get_or_build函数的优势在于它提供了更灵活的对象获取和创建方式。它可以在获取对象时进行一些额外的处理,例如设置默认值、关联其他对象等。同时,它也可以避免在获取对象时立即创建新对象,从而提高性能和资源利用率。

适用场景:

  • 当需要获取现有对象或创建新对象时,但不希望立即保存新对象到数据库时,可以使用get_or_build函数。
  • 当需要在获取对象时进行一些额外的处理或设置时,可以使用get_or_build函数。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云服务器(CVM):提供灵活可扩展的云服务器实例,满足各类计算需求。产品介绍链接
  • 腾讯云数据库(TencentDB):提供高性能、可扩展的数据库服务,包括关系型数据库和NoSQL数据库。产品介绍链接
  • 腾讯云人工智能(AI):提供丰富的人工智能服务和工具,包括图像识别、语音识别、自然语言处理等。产品介绍链接
  • 腾讯云物联网(IoT):提供全面的物联网解决方案,包括设备接入、数据管理、应用开发等。产品介绍链接
  • 腾讯云移动开发(Mobile):提供移动应用开发和运营的云服务,包括移动后端云、移动推送、移动测试等。产品介绍链接
  • 腾讯云存储(COS):提供安全可靠的云存储服务,适用于各类数据存储和文件管理需求。产品介绍链接
  • 腾讯云区块链(BCS):提供高性能、可扩展的区块链服务,支持企业级区块链应用开发和部署。产品介绍链接
  • 腾讯云元宇宙(Metaverse):提供虚拟现实(VR)和增强现实(AR)技术支持,用于构建沉浸式交互体验。产品介绍链接
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Django小技巧06: get_or_create

翻译整理自: simpleisbetterthancomplex.com get_or_create 是查找对象一种便捷方法, 其最大功能点是在目标对象不存在时候, 可以根据参数创建对象。...它实际上返回一个(object, created)元祖,第一个元素是您要检索 get 模型实例,第二个元素是个是否创建布尔值,用户判断实例是否是创建。...定义个名为AppSettings模型, 你可以在此存储配置: Python obj, created = AppSettings.objects.get_or_create(name='DEFAULT_LANG...') obj.value = request.POST.get('DEFAULT_LANG') obj.save() 如上面代码所示, 如果这是我第一次运行这段代码保存名为DEFAULT_LANG配置...,get_or_create将创建一个实例并在数据库中保留。

3.1K30
  • PythonDjango框架实现数据库查询(不返回QuerySet方法)

    4. get_or_create() 方法: get_or_create(defaults=None, **kwargs) 通过kwargs来查询对象简便方法(若模型中所有字段都有默认值或可以为空...输出结果如下: Course object True 注意: ​ 1.任何传递给get_or_create()关键字参数,除了一个可选defaults,都将传递给get()方法调用。 ​...4.如果找不到对象,get_or_create()将会实例化并保存一个新对象,返回一个由新对象以及True组成元组。...建议:只在Django视图POST请求中使用get_or_create(),因为这是一个具有修改性质动作,不应该使用在GET请求中,那样不安全。...以上这篇PythonDjango框架实现数据库查询(不返回QuerySet方法)就是小编分享给大家全部内容了,希望能给大家一个参考。

    2.6K30

    Django学习笔记之Django QuerySet方法

    一般情况下,我们在写Django项目需要操作QuerySet时一些常用方法已经满足我们日常大多数需求,比如get、filter、exclude、delete神马感觉就已经无所不能了,但随着项目但业务逻辑越来越复杂...(ip='127.0.0.1', time=, black=False) 6、get_or_create(kwargs) 和 update_or_create...(kwargs) 嗯,看看就知道这个是create升级版,没错,他们俩一个是在查无此数据后新建一个是更新不存在数据时新建,具体用法同create,get_or_create等效如下过程 try:...,他们返回两个东东: created, obj = get_or_create(**kwargs) 其中created是个bool值,当此方法生成了一个新model object,此值为True,反之为...答案在这里: django.models  on_delete参数,此参数有以下几个可选值: CASCADE:这就是delete()默认选项,也就是关联删除 PROTECT:如果删除model obj

    58650

    可重复读事务隔离级别之 django 解读

    由于django1.3(由于历史原因,目前蓝鲸体系内大多数稳定运营工具系统用django1.3)中该问题最为严重,本文先对django1.3环境中一个应用案例进行分析,说明问题产生具体原因,然后说明如何有效避免类似问题...,最后介绍较新版本django中事务实现原理(django1.6开始已经很好避免本文案例中大多数情况),并提供一个django1.8中由于对事务使用不当造成异常案例。...simple_test执行到get_or_create会尝试插入一条记录key=6e3247f8-31c5-46d7-a3e9-1c855077ea56,但是在此之前后台任务已经向数据库中插入了这个key...,simple_test执行get_or_create时候mysql就给直接报一致性错误。...到了Django1.6之后已经覆盖了这个默认规范并且将autocommit设置为 on. 因此新版本django出现上述问题概率会大大降低。

    1.8K00

    Django笔记(十一)实现对数据库各种操作,比如分组,排序等

    values()获取每行数据为字典格式 values_list() 获取每行数据为元祖 bulk_create()批量创建数据 get_or_create() update_or_create() in_bulk...from student group by age 那么Django如果实现以上功能,不仅仅以一个字段进行分组,而且还给查询出字段起别名 以上生成sql语句是 SELECT...,获取上一次值 比如我们想要将一个字段值加一,不需要每一次都拿出来加一之后再保存,可以这样写 # from django.db.models import F # Tb1.objects.update...# # from django.db import connection, connections # cursor = connection.cursor() 这个是默认数据源...bulk_create()批量创建数据 get_or_create() # 如果存在,则获取,否则,创建 # defaults 指定创建时,其他字段值 obj, created

    89410

    Django之model查select用法

    import get_object_or_404 _t = get_object_or_404(User, id=724) # get_object_or_404方法,它会先调用djangoget...方法,如果查询对象不存在的话,则抛出一个Http404异常 实现方法类似于下边这样: from django.http import Http404 try: _t = User.objects.get...(id=724) except User.DoesNotExist: raise Http404 get_or_create 顾名思义,查找一个对象如果不存在则创建,如下: object, created...是一个表示是否创建了新对象布尔值 实现方式类似于下边这样: try: object = User.objects.get(username='运维咖啡吧') created = False...中能用ORM就用它ORM吧,不建议执行原生SQL,可能会有一些安全问题,如果实在是SQL太复杂ORM实现不了,那就看看下边执行原生SQL方法,跟直接使用pymysql基本一致了 from django.db

    75840

    Django学习之旅(六)

    本文是 Django 学习之旅完结篇,主要是讲述 model 层。model 层是与数据库打交道,其中包括 怎么连接数据库、怎么对数据库进行增删改查等。...我新建一个名为 Django_demo 项目,在根目录有个名为 db SQLite 数据库。 ?...在 Django 中,一个模型类对应一个数据库表。因此,一个模型类实例就表示表中一条数据。为了输出数据一目了然,我们需要对上面的 model 进行优化。 ?...5)使用 QuerySet 更新数据 A、单个 object 更新, 适合于 .get(), get_or_create(), update_or_create() 等得到 obj,和新建很类似。...我们虽然对 Django 已经有大概认识,仅仅了解些皮毛,但是还需要深入学习,掌握其精髓。后续我会学习然后分享 Django 一些精髓用法。 作者:猴哥,公众号:极客猴。

    1.4K30

    类似于qq空间类型评论和回复

    最近学习thinkphp,做了一个博客系统,其中感觉实现一个类似于qq空间评论和回复功能比较复杂,所以把这次经历记录下来,与大家共勉,具体方法就不说了,在这里分享一下思路。 ?...其中显示博客评论和回复显示是最难,具体评论和回复功能,只要想办法获取到表中相应字段值接进去就好了, 评论和回复显示有两种思路: 1....这样就可以对同一张表连接两次了)查询到那个回复相关内容,在这个成功基础上,把返回回复内容加到相应commentdiv(通过该divid)后面。...这两种方法都可以使评论和回复显示类似于qq空间,第一种方法比较简单,但是,需要对数组特别熟悉,将结果拼接起来,第二种方法比较复杂,代码量也多,而且这样执行对服务器压力比较大,所以建议第一种方法。  ...在点击提交回复时候 ,获取回复内容,和评论div上记录评论id,连同之前user_id(作为reply_to_user_id) 提交到后台,然后在后台获取sessionuser_id(作为

    1K30

    Django ORM 知识概要

    这个不是SQL标准一部分,完全由Django处理。 DO_NOTHING:SQL等价物:NO ACTION。...permissions 定义权限 managed 是否按照Django规则管理模型类 默认是True unique_together=()/((),()) 对应MySQL中联合唯一约束 app_label...指定模型属于哪个应用(如果在settings里面已经注册过应用的话,就不用写这个字段了) db_tablespace 定义数据库表空间名字 Django 数据表操作 更改数据表 删除数据库表步骤...删除对应模型类代码 删除migrationd文件夹下面的模型类 删除Djangomigrations表中对应记录 删除数据库表 导入数据 Django shell 导入数据 引入模型 调用模型对象...() 不返回QuerySet API 获取对象 get(),get_or_create(),first(),last(),latest(),earliest(),in_bulk() 创建对象 create

    1.8K20

    【Netty】04 - 利用netty搭建类似于dubborpc框架

    学自蚂蚁课堂项目 项目地址: dubbo原理图 搭建dubbo rpc远程调用框架思想 搭建dubbo-server 自定义rpc注解,在需要注册到zk上类加,标识此类需要注册到zk上 将本地服务注册到...zk上 zk上节点要支持多个,以备之后集群情况 创建netty服务器端,并添加相应handler 通过handler去解析相应,并利用反射执行相应方法 获取反射调用结果,再相应给客户端即可...注意对象序列化与反序列化 将服务注册到zk上需要注意什么? 需要对注册路径进行编码,否则,添加节点是会出问题 resful协议格式和json协议格式区别?...rpc采用是restful风格,一般采用序列化协议为MessagePack,传递时数据为:[value1, value2, value3],优点在于更加节省空间,缺点在于不够灵活 http采用序列化协议一般为...json,json采用是key-value形式来存值。

    58920
    领券