避免在 Django 中创建重复对象
本文将解决 Django 中的 get_or_create()
方法。 一种用于避免查询集中出现冗余字段的方法。
在 Django 中使用 get_or_create() 方法
在 Django 中,我们有一种方法可以避免使用 get_or_create()
方法定义 get 或 create 代码。 当我们多次创建重复对象时,这种方法可以帮助我们避免多次创建它们。
try:
friend = Friend.objects.get(name='Harry jeams')
except DoesNotExist:
friend = Friend(name='Harry jeams')
friend.save()
在这个块中,当我们从查询集中得到一个朋友对象时,假设我们找不到这个对象,然后我们尝试创建这个对象。 如果我们要收到多个同时执行其他指令的请求,这看起来就像是一场比赛。
该过程可能会引发异常,因为查询集中不存在任何对象,因为已创建多个重复对象导致线程化。
我们有一种有效的方式来正确使用 get_or_create
方法,并且该方法通过一次操作即可快速响应。
friend,friend_to_friend = Friend.objects.get_or_create(name='Harry jeams')
get_or_create()
方法所做的第一件事是尝试使用 get() 方法获取一个对象。 不幸的是,如果第一次尝试获取对象失败,它将在我们的查询集中创建一个对象。
如果输出显示“IntegrityError”,它只会获取一个对象并返回它。 如果两个进程同时执行并获得处理和尝试创建对象的指令,则两者都将创建将成为我们查询集中的重复对象的对象。
由于这会创建重复项,因此我们需要模型字段中的唯一对象。
class Friend(models.Model):
friend_first_name = models.CharField(max_length=255)
friend_last_name = models.CharField(max_length=255)
friend, friend_to_friend = Friend.objects.get_or_create(first_name='Harry', last_name='jeams')
以下代码用于在查询集中获取和创建唯一对象。
代码示例:
class Friend(models.Model):
friend_first_name = models.CharField(max_length=255)
friend_last_name = models.CharField(max_length=255)
class SubClass:
unique = ('first_name', 'last_name')
friend, friend_to_friend = Author.objects.get_or_create(first_name='Harry', last_name='jeams')
Django 的 get_or_create()
函数返回两个变量。 第一个是对象,第二个是布尔变量。
有时我们只需要获取它返回的对象,所以我们使用这种语法。
句法:
friend, friend_to_friend = Friend.objects.get_or_create(name='Harry jeams', defaults={'list_of_friend': 0, 'place': 'college'})
如果我们的查询集中只有一个字段,我们可以使用 defaults__exact 代替 get_or_create()
方法中的默认参数。
相关文章
Pandas DataFrame DataFrame.shift() 函数
发布时间:2024/04/24 浏览次数:133 分类:Python
-
DataFrame.shift() 函数是将 DataFrame 的索引按指定的周期数进行移位。
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
Pandas read_csv()函数
发布时间:2024/04/24 浏览次数:254 分类:Python
-
Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。
Pandas 多列合并
发布时间:2024/04/24 浏览次数:628 分类:Python
-
本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。
Pandas loc vs iloc
发布时间:2024/04/24 浏览次数:837 分类:Python
-
本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串