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

Django get_or_create具有主/从写/读配置

Django get_or_create 的高级用法:主/从写/读配置

Django 的 get_or_create 函数是一个用于处理数据库 CRUD(创建、读取、更新、删除)操作的轻量级封装。get_or_create 函数通过查询数据库来找到满足特定条件的记录,或者创建新的记录。在处理大量数据时,get_or_create 可以显著提高性能。

以下是关于 Django get_or_create 函数的高级用法:

1. 主/从写/读配置

get_or_create 支持主/从写/读配置。这意味着你可以指定一个默认值(主),在数据不存在时基于这个默认值执行写操作。

代码语言:python
代码运行次数:0
复制
from django.db.models import Q

def get_or_create_with_default(model_class, defaults=None, **kwargs):
    defaults = defaults or {}
    instance, created = model_class.objects.get_or_create(
        defaults=defaults, **kwargs
    )
    return instance, created

2. 指定创建或更新的默认值

你可以通过修改 defaults 参数来设置创建或更新操作时的默认值。

代码语言:python
代码运行次数:0
复制
def get_or_create_with_default(model_class, defaults=None, **kwargs):
    defaults = defaults or {}
    instance, created = model_class.objects.get_or_create(
        defaults=defaults, **kwargs
    )
    return instance, created

3. 指定创建或更新的字段

你还可以通过修改 fields 参数来指定要创建或更新的字段。

代码语言:python
代码运行次数:0
复制
def get_or_create_with_fields(model_class, fields=None, **kwargs):
    fields = fields or []
    instance, created = model_class.objects.get_or_create(
        fields=fields, **kwargs
    )
    return instance, created

4. 同时使用主/从写/读配置和字段指定

你可以同时使用主/从写/读配置和字段指定。

代码语言:python
代码运行次数:0
复制
from django.db.models import Q

def get_or_create_with_fields_and_defaults(model_class, fields=None, defaults=None, **kwargs):
    fields = fields or []
    defaults = defaults or {}
    instance, created = model_class.objects.get_or_create(
        fields=fields, defaults=defaults, **kwargs
    )
    return instance, created

使用这些高级用法,你可以根据需求为 get_or_create 提供合适的默认值和字段。

总结:以上高级用法允许你在使用 Django 的 get_or_create 函数时,在数据不存在时创建新的记录,并提供了默认值和字段。这可以提高性能并减少冗余代码。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Django学习笔记之Django QuerySet的方法

一般情况下,我们在Django项目需要操作QuerySet时一些常用的方法已经满足我们日常大多数需求,比如get、filter、exclude、delete神马的感觉就已经无所不能了,但随着项目但业务逻辑越来越复杂...对,文档!这里的文档不是有业务需求时去查文档,而是要为了阅读文档而阅读文档。...我文档时就这感觉。。后来发现是酱紫滴,一个复杂滴model可能你数据库中读出后根本不需要某些字段,读了又浪费时间浪费空间,怎么办?对!...才会数据库读取这些数据,感觉在数据量变大后用这个方法很nice,具体用法如下: Blog.objects.defer("content").filter(publish=True).defer("title...week_day hour minute second insole (ex: search) iregex 其中,首字母带“i”的意思就是不分大小写,如果需要大小写敏感就把“i”去掉啦~其他参数大体字面意思就知道啦

58650

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

默认的事务隔离级别是可重复读,因此在simple_test整个事务期间,都找不到key=6e3247f8-31c5-46d7-a3e9-1c855077ea56的记录,所以simple_test执行到get_or_create...会尝试插入一条记录key=6e3247f8-31c5-46d7-a3e9-1c855077ea56,但是在此之前后台任务已经向数据库中插入了这个key,simple_test执行get_or_create...我们可能会有些相对稳定运营的django1.3在生产环境,如果真的出现了类似的问题,可以尝试几个方面修复: (1)调整中间件,对登录认证完成之后进行一次commit操作。...(3)如果只是需要把记录拿出来更新,可以考虑直接sql更新记录。...`key` = '27ada689-86f4-4192-a0b9-dc6608d74ed9' django1.8中执行的sql可以看出,Django1.8的默认行为是运行在自动提交模式下。

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

    里面执行原生SQL reverse 倒叙 all() 和 value() 获取到的结果是不同类型 only() 仅仅取出这个里面的字段 defer() 取出除了这个里面的其他字段 using() 指定去哪个数据库拿数据...values()获取每行数据为字典格式 values_list() 获取每行数据为元祖 bulk_create()批量创建数据 get_or_create() update_or_create() in_bulk...# # models.Tb1.objects.filter(id__range=[1, 2]) # 范围bettwen and 排序 默认从小到大,加减号,是大到小...不等于 Article.objects.exclude(id=1) F() 我们在做更新的时候,获取上一次的值 比如我们想要将一个字段的值加一,不需要每一次都拿出来加一之后再保存,可以这样...指定去哪个数据库拿数据 values()获取每行数据为字典格式 获取每行数据为字典格式 values_list() 获取每行数据为元祖 获取每行数据为元祖 bulk_create()批量创建数据 get_or_create

    89610

    05.Django基础五之django模型层(一)单表操作

    ,那么你之前用sql语句的数据库操作,那么就需要将sql语句全部修改,但是如果你用orm,就不需要担心这个问题,不管是你mysql变更到oracle还是oracle更换到mysql,你如果用的是orm...来搞的,你只需要修改一下orm的引擎(配置文件里面改一些配置就搞定)就可以了,你之前的那些orm语句还是会自动翻译成对应数据库的sql语句。       ...CharField 要求必须有一个参数 maxlength, 用于数据库层和Django校验层限制该字段所允许的最大字符数. IntegerField #用于保存一个整数....注意2:确保配置文件中的INSTALLED_APPS中写入我们创建的app名称 INSTALLED_APPS = [ 'django.contrib.admin', #这是django给你提供的一些特殊功能的配置..."book" #直接app的名字也行,'app01.apps.App01Config'也行 ]        注意3:如果报错如下: django.core.exceptions.ImproperlyConfigured

    3K10

    Python:轻量级 ORM 框架 peewee 用法详解

    这里外键可为空和不可为空是不一样的,下面说明     class Meta:         database = db ① 当 recursive=False 时,只删除了【部门】,【人员】没有影响,..., [1]) 三、修改 1、save 之前说过,save() 方法可以插入一条记录,一旦模型实例具有主键,任何后续调用 save() 都将导致 UPDATE 而不是另一个 INSERT。...语法: get(*query, **filters) 参数: query:查询条件 filters:Mapping of field-name to value for Django-style filter...返回值: get_or_create 方法有两个返回值,第一个是“获取/创建”的模型实例,第二个是是否新创建。 5、select 使用 Model.select() 查询获取多条数据。...解释一下,在 SQLite 中,如果希望 like 的时候区分大小写,可以这么: Person.select().where(Person.Remarks % 'a*') 如果不希望区分大小写,这么

    5.8K20

    django 1.8 官方文档翻译: 2-5-6 多数据库

    目前,唯一一个提供的hint 是instance,它是一个对象实例,与正在进行的或者操作关联。...让我们看一下另外一个配置的例子。这个配置将有几个数据库:一个用于auth 应用,所有其它应用使用一个具有两个replica 的 primary/replica。...此时p没有主键,所以Django 发出一个SQL INSERT语句。这会创建一个主键,且Django 将此主键赋值给p。...如果一个对象没有主键,Django 将把它当做一个新的对象,这将避免second数据库上数据的丢失: >>> p = Person(name='Fred') >>> p.save(using='first...但是Django 官方不支持这种配置。 Contrib 应用的行为 有几个Contrib 应用包含模型,其中一些应用相互依赖。

    1.5K20

    如何阅读技术文档

    除了view内部的逻辑之外,在一个view被调用之前还有一个urlconf的配置,用来匹配对应的url到对应的view中。...可能存在的捷径 无论是翻译的中文文档,还是遇到问题时去搜中文的资料,你看到的任何一个材料其实都逃不了Django的官方文档。...无论是翻译还是别人(或者我)的关于Django某一点的应用,都会随着Django版本的更新变得不再实用。并且所有这些资料的最终来源都是在官方文档上,因此不如直接源头上汲取营养。...就像是我之前的那篇《Django的Tutorials可以学到什么》一样,虽然以前就看过,但是不实践一次的话,还是没有什么感觉。 所以,以练促对我来说是一个高效的,并且不太费时的方法。...这篇文章,其实就是在实践上面的 以教促学 这一方法,写文章的耗时要远多于我自己在脑海中构想Django的文档结构,但写出来才是真正的把构想实现。这也是我喜欢博客缘由之一。

    2.1K90

    【愚公系列】2022年02月 Python教学课程 60-Django框架之数据库读写分离的配置

    文章目录 前言 1.读写分离的概念 2.读写分离的优点 一、Django配置读写分离 1.在配置文件中增加slave数据库的配置 2.创建数据库操作的路由分发类 3.配置读写分离路由 前言 1.读写分离的概念...也就是,第一台数据库服务器,是对外提供增删改业务的生产服务器;第二台数据库服务器,主要进行的操作。...2.读写分离的优点 提高读写性能 数据写入和读取是在不同的服务器上进行的,而且可以通过增加服务器来提高数据库的读取性能 提高数据安全 因为数据已复制到服务器,可以在从服务器上备份而不破坏主服务器相应数据...一、Django配置读写分离 1.在配置文件中增加slave数据库的配置Django配置文件settings.py中,DATABASES中添加代码如下: DATABASES = { 'default...: """读数据库""" return "slave" def db_for_write(self, model, **hints): """数据库

    16620

    MongoDB 偏好设置中增加最大有效延迟时间的参数

    premaryPreferred — 设置了此参数的驱动会主节点读取数据,除非某些原因使主节点不可用或者没有主节点,此时它会节点读取数据。此种设置下,请求无法保证一致性。...secondary — 这个设置告诉驱动应该一直节点读取数据。这种设置对于我们想确保请求不会影响主节点的写入请求时非常有用。如果没有可用的节点,请求会抛出异常。...primary是唯一一个可以确保一致的模式。因为请求首先在主节点完成,服务器的更新会有些延迟,所以可能在从节点无法找到刚刚在主节点写入的文档数据。...当选择了使用maxStalenessSeconds进行操作的服务端,客户端会通过比较节点和主节点的最后一次时间来估计节点的过期程度。...客户端会把连接指向估计落后小于等于maxStalenessSeconds的节点。如果没有主节点,客户端使用节点间的最近一次操作来比较。

    81530

    关于“Python”的核心知识点整理大全59

    确定当前有哪些用户 我们迁移数据库时,Django将对数据库进行修改,使其能够存储主题和用户之间的关联。为 执行迁移,Django需要知道该将各个既有主题关联到哪个用户。...Django询问要将既有主题关联 到哪个用户时,我们将指定其中的一个ID值。 3. 迁移数据库 知道用户ID后,就可以迁移数据库了。...Chess ll_admin Rock Climbing ll_admin >>> 我们learning_logs.models中导入Topic(见1),再遍历所有的既有主题,并打印每个主 题及其所属的用户...代码 Topic.objects.filter(owner=request.user)让Django数据库中获取owner属性为当前用户的 Topic对象。...现在,如果你试图查看其他用户的主题条目,将看到Django发送的消息Page Not Found。在 第20章,我们将对这个项目进行配置,让用户看到更合适的错误页面。

    13710

    完整的 Django 零基础教程|初学者指南 - 第 3 部分 转自:维托尔·弗雷塔斯

    对我来说,这是难以处理在在例子你一个概念 Class A和 Class B,或者当我看到经典的 foo(bar)例子。我不想和你做那种事。...用例图 类图 用例图中,我们可以开始考虑我们项目的实体 。实体是我们将要创建的模型,它与我们的 Django 应用程序将处理的数据密切相关。...一个用户可能有很多或没有主题( 0..*)。 ? 类图帖子和用户关联一个帖子必须有一个并且只有一个用户与:创建者( 1)相关联。一个用户可能有很多或没有 帖子( 0..*)。...如果用户点击一个链接,比如在 Django 面板中,它应该列出所有主题: ? 线框主题 图 6:Boards 项目线框,列出了 Django board 中的所有主题。...该用户 模型中已经定义了一个内置的应用程序命名的权威性 ,这是我们列出 INSTALLED_APPS的配置命名空间下django.contrib.auth 。

    2.2K40

    原 如何保障数据库的高可用

    方案二:主从结构方案 1.数据库架构图 2.特点     一台机器A作为库,另一台B作为库;A库故障后B库充当读写,A修复后,B库为库,A库为库。...数据库的主主配置、故障排除和数据补全,依然需要DBA和运维人员来维护。 4.适应场景 都不是非常高的场景(单表数据低于1000万),高可用。比方案一并发要高很多。...高并发、低数据量方案 方案三:一主多+读写分离 1.数据库架构图 2.特点 一个主库A多个库,当主库A故障时,提升库B为主库,同时修改C、D库为B的库。A故障修复后,作为B的库。...> 主库A故障后,Mycat会自动把B提升为库。...数据库架构图 2.特点 采用Mycat进行分片存储,可以解决负载均衡和数据量过大问题;每个分片配置多个库,可以减少单个库的压力。

    75320

    【Web开发 | Django】数据库分流之道:探索Django多数据库路由最佳实践

    希望大佬带带)该文章收录专栏✨[---【Django | 项目开发】入门到上线 专栏---](https://blog.csdn.net/weixin_66526635/category_11905572....html)✨该文章收录专栏✨[---Django(图文并茂轻松上手教程)专栏---](https://blog.csdn.net/weixin_66526635/category_11696921....默认主键,还要再app.py中设置对应默认主键字段),或者修改django中的应用,主键配置。...router数据库路由类并添加到settings我们既然是多数据库路由,那么在对表进行增删改查就需要进行区分,路由类router则充当了这个角色创建路由类路由必须要有四个函数db_for_read db_for_write...allow_relation 数据库之间链接关系allow_migrate 是否允许迁移数据"""setting/routers.py一个数据库路由是一个拥有4个方法的类"""class DatabaseRouter

    20320

    【Web开发 | Django】数据库分流之道:探索Django多数据库路由最佳实践

    希望大佬带带) 该文章收录专栏 ✨—【Django | 项目开发】入门到上线 专栏—✨ 背景 在实际上,有许多遗留的系统,但此时我们仍需要管理其数据,并在不更改其数据表结构的情况下,此时我们可以使用多数据库路由实现...假如我们现在有一个mysql的数据库信息,我们需要将其纳入管理 配置多数据源settings 创建应用用于存放管理 startapp company settings添加多数据库配置 DATABASES...默认主键,还要再app.py中设置对应默认主键字段),或者修改django中的应用,主键配置。...router数据库路由类并添加到settings 我们既然是多数据库路由,那么在对表进行增删改查就需要进行区分,路由类router则充当了这个角色 创建路由类 路由必须要有四个函数 db_for_read ...db_for_write allow_relation 数据库之间链接关系 allow_migrate 是否允许迁移数据 """ setting/routers.py 一个数据库路由是一个拥有4个方法的类

    34941
    领券