Проблема производительности - код, написанный для чтения данных из xlsx и сохранения их в базе данных - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь вставить данные в свою базу данных.Я думал, что выполнение массовой вставки поможет, но это только уменьшило мое время выполнения на 1 минуту.Для записи 12k моя программа занимает ~ 13 минут, чтобы вставить данные.Есть ли что-то, что я могу изменить в своем коде или использовать что-то, с чем я могу увеличить производительность своего кода.

Чтение из таблиц эмитента и областей обслуживания - это запрос simple select id from table.Я предполагаю максимальное время, необходимое для генерации моего MedicalPlan_dict. Могу ли я что-то изменить здесь.

 def medical_plan_upload(self):

        medicalplanread = ReadExcel()
        getmodeldata = GetModelData()

        # read plans excel
        df = medicalplanread.readplanexcel()
        MedicalPlan_dict = []
        try:
            headers = getmodeldata.get_medical_plans_headers()
            dataframe = df[df.columns.intersection(headers)]
            commonColumns = dataframe.columns.tolist()

            # iterate through the dataframe - get value for issuer table and insert/update in medical plan table
            for index, frame in df.iterrows():
                temp_dict = {}
                # reading from Issuer table
                issuerid = getmodeldata.get_issuer(frame['wellthie_issuer_identifier'])
                # reading from Service_area table
                service_area_id = getmodeldata.get_serviceArea(frame['service_area_identifier'])
                if service_area_id is not None and issuerid is not None:
                    # reading from medical plans table
                    medical_plan = getmodeldata.get_medicalplans(issuerid, frame['hios_plan_identifier'], frame['plan_year'],
                                                                 frame['group_or_individual_plan_type'])
                    if not medical_plan:  # check if medical_plan is []

                        medical_plans_data = frame.to_dict()
                        for key, value in medical_plans_data.iteritems():

                            if key in commonColumns:
                                if pd.isna(value):
                                    value = None
                                    temp_dict[key] = value

                                else:
                                    temp_dict[key] = value

                        temp_dict["issuer_id"] = issuerid
                        temp_dict["service_area_id"] = service_area_id

                        MedicalPlan_dict.append(temp_dict)
                        # new_plan = MedicalPlan(**temp_dict)
                        # sess.add(new_plan)
                        # sess.commit()
                    else:
                        print ("row number..", index, " is already in the db...")
                        continue

                else:
                    print ("row number.. ", index, "is invalid")

            engine = create_engine('postgresql+psycopg2://postgres:postgres@localhost/test_biz_dev')
            conn = engine.connect()
            conn.execute(MedicalPlan.__table__.insert(), MedicalPlan_dict)
        except Exception as e:
            print e
        finally:
            conn.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...