我在django上传一个.csv文件,我正在接受500行csv的组并用bulk_create上传它们,但是我得到了这个错误......
这就是我在做什么:
personas = []
Aux_USER = []
reader = csv.reader(path)
reader.next()
row_count = sum(1 for row in reader)
reader = csv.reader(path)
reader.next()
for row in reader:
if not Usuario.objects.filter(casillero=if_empty(row[0])).exists():
clave = "%32x" % random.getrandbits(128)
hash = clave[0: 6]
if len(row[4])>30 or len(row[3]) > 30:
ErrorLog.objects.create(casillero=row[4])
else:
usr = User.objects.create(
username=row[1],
first_name=row[3],
last_name=row[4],
password=hash,
email=row[5],
)
if not (row[5] == ""):
# usuario_aux(
usuario_aux.user=usr.id
usuario_aux.clave=hash
usuario_aux.correo=False
# )
# usuario_aux.objects.create(
# user=usr.id,
# clave=hash,
# correo=True
# )
#person_user_email(
Usuario.user=usr.id
Usuario.casillero=if_empty(row[0])
Usuario.cuenta_individual=row[1]
Usuario.integrante=row[2]
Usuario.telefono=row[6]
Usuario.plan_inscripcion=row[9]
Usuario.estado=row[10]
Usuario.municipio=row[11]
Usuario.parroquia=row[12]
Usuario.ciudad=row[13]
Usuario.urbanizacion=row[14]
Usuario.avenida=row[15]
Usuario.tipo_inmueble=row[16]
Usuario.codigo_postal=if_empty(row[17])
Usuario.status=row[29]
usr = None
# )
else:
# usuario_aux(
usuario_aux.user=usr.id
usuario_aux.clave=hash
usuario_aux.correo=False
# )
#usuario_aux.objects.create(user=usr.id, clave=hash)
#person_user_email(
Usuario.user=usr.id
Usuario.casillero=if_empty(row[0])
Usuario.cuenta_individual=row[1]
Usuario.integrante=row[2]
Usuario.telefono=row[6]
Usuario.plan_inscripcion=row[9]
Usuario.estado=row[10]
Usuario.municipio=row[11]
Usuario.parroquia=row[12]
Usuario.ciudad=row[13]
Usuario.urbanizacion=row[14]
Usuario.avenida=row[15]
Usuario.tipo_inmueble=row[16]
Usuario.codigo_postal=if_empty(row[17])
Usuario.status=row[29]
usr = None
#)
personas.append(Usuario)
Aux_USER.append(usuario_aux)
n_objects = len(personas)
if row_count < 500:
Usuario.objects.bulk_create(personas)
usuario_aux.bulk_create(Aux_USER)
print "listo"
personas = []
if n_objects == 500:
Usuario.objects.bulk_create(personas)
usuario_aux.bulk_create(Aux_USER)
print "500 creados"
row_count -= 500
personas = []
当我看到管理员时,它只会创建&#34; 488&#34;用户,永远不会显示打印&#34; listo&#34;为什么会这样?
答案 0 :(得分:1)
create()方法在创建记录时保存记录。在许多情况下,这是一个很好的方便,但它完全违背了使用bulk_create()的目的。
我不认为这是此代码的唯一问题,但它解释了如何在不打印&#34; listo&#34;的情况下保存488条记录。在您重构时,我建议您专注于正确处理CSV中的前10条记录,然后然后担心优化整套的性能。