Итерация над строками CSV с помощью pandas более быстрым способом

Я пытаюсь прочитать CSV файл через загрузку файла из html шаблона, итерировать строки и создать объект модели.

views.py

 ​@​login_required 
 ​def​ ​uploadStudents1​(​request​): 
 ​    ​if​ ​request​.​method​ ​==​ ​'POST'​: 
 ​        ​uploaded_file​ ​=​ ​request​.​FILES​[​'document'​] 
 ​        ​ext​ ​=​ ​os​.​path​.​splitext​(​uploaded_file​.​name​)[​-​1​].​lower​() 
 ​        ​if​ ​ext​ ​==​ ​'.csv'​: 
 ​            ​data_file​ ​=​ ​pd​.​read_csv​( 
 ​                ​uploaded_file​, ​parse_dates​=​[​'date_of_birth'​]) 
 ​            ​data_file​.​fillna​(​'-'​, ​inplace​=​True​) 
 ​            ​for​ ​_​, ​row​ ​in​ ​data_file​.​iterrows​(): 
 ​                ​Sem1Students​.​objects​.​create​( 
 ​                    ​fname​=​row​[​'first_name'​], 
 ​                    ​lname​=​row​[​'last_name'​], 
 ​                    ​reg_no​=​row​[​'reg_no'​], 
 ​                    ​gender​=​row​[​'gender'​], 
 ​                    ​birth_date​=​row​[​'date_of_birth'​], 
 ​                ) 
 ​            ​messages​.​success​(​request​, ​'Uploaded student details successfully!'​) 
 ​            ​return​ ​redirect​(​'/students'​) 
 ​        ​else​: 
 ​            ​messages​.​error​(​request​, ​"Invalid file type. Please upload again."​) 
 ​            ​return​ ​render​(​request​, ​'students/upload1.html'​) 
  
 ​    ​return​ ​render​(​request​, ​"students/upload/upload1.html"​)

Однако этот процесс очень медленный, на чтение и создание 74 записей уходит около 5-6 секунд.

Есть ли лучший способ сделать это, т.е. ускорить процесс?

Вам следует использовать bulk_create, потому что создание займет время, если вы сделаете это внутри цикла

 ​@​login_required 
 ​def​ ​uploadStudents1​(​request​): 
 ​    ​if​ ​request​.​method​ ​==​ ​'POST'​: 
 ​        ​uploaded_file​ ​=​ ​request​.​FILES​[​'document'​] 
 ​        ​ext​ ​=​ ​os​.​path​.​splitext​(​uploaded_file​.​name​)[​-​1​].​lower​() 
 ​        ​if​ ​ext​ ​==​ ​'.csv'​: 
 ​            ​data_file​ ​=​ ​pd​.​read_csv​( 
 ​                ​uploaded_file​, ​parse_dates​=​[​'date_of_birth'​]) 
 ​            ​data_file​.​fillna​(​'-'​, ​inplace​=​True​)
             semi_st = [] 
 ​            ​for​ ​_​, ​row​ ​in​ ​data_file​.​iterrows​(): 
 ​                ​semi_st.append(Sem1Students​​( 
 ​                    ​fname​=​row​[​'first_name'​], 
 ​                    ​lname​=​row​[​'last_name'​], 
 ​                    ​reg_no​=​row​[​'reg_no'​], 
 ​                    ​gender​=​row​[​'gender'​], 
 ​                    ​birth_date​=​row​[​'date_of_birth'​], 
 ​                ))
             Sem1Students.objects.bulk_create(semi_st)
 ​            ​messages​.​success​(​request​, ​'Uploaded student details successfully!'​) 
 ​            ​return​ ​redirect​(​'/students'​) 
 ​        ​else​: 
 ​            ​messages​.​error​(​request​, ​"Invalid file type. Please upload again."​) 
 ​            ​return​ ​render​(​request​, ​'students/upload1.html'​) 
  
 ​    ​return​ ​render​(​request​, ​"students/upload/upload1.html"​)
Вернуться на верх