[英]Bulk create Django with unique sequences or values per record?
当我在数据库中的其他位置创建记录时,我实际上具有一个表,该表是唯一键的可用代码/序列的池。 现在,我运行一个事务,其中我可以使用slice运算符[:code_count](其中code_count == 5000)从可用的10亿个代码池中提取5000个代码。
这可以正常工作,但是对于每次插入,我都必须遍历每个代码,并在使用代码时手动将其插入记录中。
有没有更好的办法?
示例代码(为每个new_item省略与所有new_items相似的其他属性):
code_count=5000
pool_cds = CodePool.objects.filter(free_indicator=True)[:code_count]
for pool_cd in pool_cds:
new_item = Item.objects.create(
pool_cd=pool_cd.unique_code,
)
new_item.save()
cursor = connection.cursor()
update_sql = 'update CodePool set free_ind=%s where pool_cd.id in %s'
instance_param = ()
#Create ridiculously long list of params (5000 items)
for pool_cd in pool_cds:
instance_param = instance_param + (pool_cd.id,)
params = [False, instance_param]
rows = cursor.execute(update_sql, params)
据我了解它是如何工作的:
code_count=5000
pool_cds = CodePool.objects.filter(free_indicator=True)[:code_count]
ids = []
for pool_cd in pool_cds:
Item.objects.create(pool_cd=pool_cd.unique_code)
ids += [pool_cd.id]
CodePool.objects.filter(id__in=ids).update(free_ind=False)
顺便说一句,如果您使用queryset方法create创建对象,则不需要调用save方法。 参见docs 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.