Python 正在批量创建上验证Django模型数据
我目前正在尝试在Django 1.9.2(Python 3.5.1)中批量创建一些对象 应用程序将批量导入数据,我想在将数据插入数据库之前验证数据 显然,使用.bulk_create()的性能远远优于.save(),但是.full_clean()也在扼杀我的性能 问题视图:Python 正在批量创建上验证Django模型数据,python,django,performance,validation,bulkinsert,Python,Django,Performance,Validation,Bulkinsert,我目前正在尝试在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: li
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()进行验证时,我的速度从插入9999条记录的2.224s提高到19.592s。如果您确实需要执行此代码,可以手动创建一个迁移,该迁移针对您的数据库后端,您可以在其中向数据库列添加 这将允许您使用
bulk\u create()
,并在失败时引发IntegrityError
,而不是调用full\u clean()
并捕获ValidationError