Делать массовое обновление с помощью sqlalchemy - PullRequest
0 голосов
/ 26 октября 2018

У меня есть список словарей.

 [{'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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...