了解 django 事务

Understanding django transactions

我有一个关于理解 和 transaction.atomic() 的小问题。如果我想用这样的单个事务创建批量对象

emails = [1, 2, 3, 4, 5] 
for email in emails: 
    Users.objects.create(email=email)

1) 上面的代码在每次迭代时创建并执行一个查询。因此,每封电子邮件的日期时间字段都不同。这是正确的吗?

但是如果我使用:

with transaction.atomic(): 
    emails = [1, 2, 3, 4, 5] 
    for email in emails: 
        Users.objects.create(email=email)

我问的原因是我有一个后台芹菜任务,它通过循环迭代为多个用户创建通知,我发现它效率不高。所以我想知道它是否会在单个事务中执行,如果是,事务中创建的每个通知的日期时间字段是否相等?

谢谢

在这两种情况下,每个用户的日期时间字段都不同。如果您希望每个用户的日期时间相同,则必须手动传递它:

with transaction.atomic():
    emails = [1, 2, 3, 4, 5]
    now = timezone.now()
    Users.objects.bulk_create([
        Users(email=email, date_joined=now) for email in emails
    ])

您可以使用 Model.objects.bulk_create:

This method inserts the provided list of objects into the database in an efficient manner (generally only 1 query, no matter how many objects there are):


Users.objects.bulk_create([
    Users(email=email) for email in [1, 2, 3, 4, 5]
])