了解 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]
])
我有一个关于理解 和 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]
])