Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正在批量创建上验证Django模型数据_Python_Django_Performance_Validation_Bulkinsert - Fatal编程技术网

Python 正在批量创建上验证Django模型数据

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

我目前正在尝试在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()进行验证时,我的速度从插入9999条记录的2.224s提高到19.592s。如果您确实需要执行此代码,可以手动创建一个迁移,该迁移针对您的数据库后端,您可以在其中向数据库列添加

这将允许您使用
bulk\u create()
,并在失败时引发
IntegrityError
,而不是调用
full\u clean()
并捕获
ValidationError