关于django中的get_or_create方法的坑

最近在项目中发现了这样的一个坑,那就是我们的需求是不能添加一个相同的对象到数据库中,就通过某些字段的值组合成唯一值到数据库中去查找数据,如果没有找到对象,那就创建一条新的数据库记录,而刚好django又提供了这种方法,那就是get_or_create。可是在测试的时候发现会加入相同的对象。

而解决方法就是:其实我们可以从数据库级别来使这几个字段组合唯一,这样如果有重复的数据就会加不进去。

class Meta:    unique_together = (("xxx", "xxxx"),)

先到数据库中找,找不到就创建。

但是为什么使用get_or_create方法就会可能失败呢?

因为get_or_create并不是线程安全的,在多线程得情况下,可能会创建相同数据的字段。

原文地址:https://www.cnblogs.com/bao9687426/p/12208881.html

时间: 2024-08-30 14:30:23

关于django中的get_or_create方法的坑的相关文章

利用Django中的url方法实现地址动态拼接自动生成超链接地址

目标 建立一个图书列表页面,显示图书名列表,并实现点击书名跳转到图书详细页面,显示图书详细信息. URL方法简介 功能:返回一个绝对路径的引用(不包含域名的URL):该引用匹配一个给定的视图函数和 一些可选的参数. 语法:{% url 'some-url-name' value1 value2 %} 参数'some-url-name'表示在urls.py文件中的路由地址: 参数value1和value2表示拼接的值,可选. 例如,urls.py: url(r'^bookinfo/(\d+)/$'

Django中的as_view方法源码分析

django的类视图拥有自动查找指定方法的功能,通过调用as_views()方法实现. 在探讨这个问题之前,先引入一段代码举个例子方便理解: 一般请求的判断方法: def View(request,*args,**kwargs): if request.method.lower() == 'get': do_something() if request.method.lower() == 'post': do_something() 编写自定义的视图类,前提必须要继承基类View,然后使用Vie

ThinkPHP中的parseDSN方法的坑记录一下

<?php/** * DSN解析 * 格式: mysql://username:[email protected]:3306/DbName * @static * @access public * @param string $dsnStr * @return array */function parseDSN($dsnStr) { if( empty($dsnStr) ){return false;} $info = parse_url($dsnStr); if($info['scheme']

异步任务队列Celery在Django中的使用

前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队列框架,鉴于网上关于Celery和Django结合的文档较少,大部分也只是粗粗介绍了大概的流程,在实践过程中还是遇到了不少坑,希望记录下来帮助有需要的朋友. 一.Django中的异步请求 Django Web中从一个http请求发起,到获得响应返回html页面的流程大致如下:http请求发起 --

celery在Django中的使用

前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队列框架,鉴于网上关于Celery和Django结合的文档较少,大部分也只是粗粗介绍了大概的流程,在实践过程中还是遇到了不少坑,希望记录下来帮助有需要的朋友. 一.Django中的异步请求 Django Web中从一个http请求发起,到获得响应返回html页面的流程大致如下:http请求发起 --

Django中request和response中的属性方法详述

转载于 http://blog.chinaunix.net/uid-21633169-id-4332621.html Django 使用 request 和 response 对象表示系统状态数据.. 当请求一个页面时,Django创建一个 HttpRequest 对象.该对象包含 request 的元数据. 然后 Django 调用相应的 view 函数(HttpRequest 对象自动传递给该view函数<作为第一个参数>), 每一个 view 负责返回一个 HttpResponse 对象

django模型中的__str__()方法和__unicode__()方法

在Django中,如果用的是Python3的话就只能用__str__方法,如果是Python2的话就使用__unicode__方法.因为更安全一些. 作用:没加之前在admin后台看到的是一个对象,加了以后看到的是一个字段的值.如下两个图的区别: 原文地址:https://www.cnblogs.com/pythonchen/p/10116390.html

django中将views.py中的python方法传递给html模板文件

常规的模板渲染 from django.db import models # Create your models here. class ArticalType(models.Model): caption = models.CharField(max_length=16) class Category(models.Model): caption = models.CharField(max_length=16) class Artical(models.Model): title = mo

Django中redis的使用方法(包括安装、配置、启动)

一.安装redis: 1.下载: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 2.解压 tar -zxvf redis-3.2.8.tar.gz 3.复制,放到/usr/local目录下 sudo mv ./redis-3.2.8 /usr/local/redis 4.进入到redis目录下 cd /usr/local/redis/ 5.生成 sudo make 6.测试,时间会比较长 sudo make test 7.安装