【发布时间】:2016-05-21 18:36:22
【问题描述】:
我目前正在尝试在 Django 1.9.2 (Python 3.5.1) 中批量创建一些对象。
应用程序将批量导入数据,我想在将数据插入数据库之前对其进行验证。
显然,使用 .bulk_create() 的性能远优于 .save(),但 .full_clean() 也在扼杀我的性能。
有问题的观点:
subscription = get_object_or_404(Subscription, pk=subscription_id)
users = list(range(1,10000))
if users:
licenses = []
for u in users:
license = SubscriptionLicense(resource=subscription.resource,
external_user_id=int(u), license_expiration_time=None,
transferable=subscription.license_transferable,
subscription=subscription
)
# Question is in regards to this line
license.full_clean()
licenses.append(license)
SubscriptionLicense.objects.bulk_create(licenses)
return HttpResponse(status=201)
else:
raise ValidationError(_('Invalid users provided.'))
关于如何在不影响性能的情况下根据模型规则验证对象有什么想法吗?
在这种情况下,我在本地运行它(unittest),当我使用 .full_clean() 进行验证时,我的速度从 2.224 秒插入 9999 条记录而无需验证到 19.592 秒
【问题讨论】:
标签: python django performance validation bulkinsert