У меня есть список словарей.
[{'medical_plan_id': 1039481, u'hearing_aids': '', u'clinical_diagnostic_mri': u'20% coinsurance', u'emergency_room': u'20% coinsurance'}, {'medical_plan_id': 1039482, u'hearing_aids': '', u'clinical_diagnostic_mri': u'20% coinsurance', u'emergency_room': u'20% coinsurance'}]
Я могу выполнить массовую вставку, используя следующий код -
def write_plan_benefittodb(self, benefits_dict):
try:
count = benefits_dict.__len__()
engine = create_engine('postgresql+psycopg2://postgres:postgres@localhost/test_db', use_batch_mode=True)
conn = engine.connect()
if count > 0:
print ("Bulk update to database..")
conn.execute(MedicalPlanBenefit.__table__.insert(), benefits_dict)
else:
print("No rows to update..")
logging.info("Number of rows inserted. %s \n", benefits_dict.__len__())
except Exception as e:
print e
logging.error("No records were updated due to following error . %s", e)
finally:
conn.close()
Я хочу запустить массовую Update()
, используя мою модель MedicalPlanBenefit
на medical_plan_id
.Как этого добиться?
Класс моей модели:
class MedicalPlanBenefit(Base):
__tablename__ = "medical_plan_benefits"
id = Column(Integer, nullable=False, primary_key=True)
medical_plan_id = Column(Integer)
maximum_out_of_pocket_limit_single = Column(String)
maximum_out_of_pocket_limit_family = Column(String)
Я могу выполнить обновление после жестко заданной привязки к values()
.Я не хочу этого делать, так как количество столбцов в 50-х.Я хочу добиться этого с моим списком диктов. Как-нибудь предложения, пожалуйста.
stmt = MedicalPlanBenefit.__table__.update()\
.where(MedicalPlanBenefit.__table__.c.medical_plan_id == bindparam('med_plan_id'))\
.values({'emergency_room': bindparam('emergency_room')})
conn.execute(stmt, benefits_dict)