Я пытаюсь вставить данные в свою базу данных.Я думал, что выполнение массовой вставки поможет, но это только уменьшило мое время выполнения на 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()