如何利用Python字典高效批量更新PostgreSQL指定字段的值?
批量更新PostgreSQL表的高效实现方案
背景与需求
我有一个Python字典,存储id到合约日期的映射:
id_to_contract_date = {1: 20242222, 2:20240303, 3:20240404, 102834: 20240505, ...}
我的PostgreSQL表sval结构如下,每个id对应3个不同的fid:
id fid ts val 1 900 2021-09-20 00:00:00.000 Futures 1 4055 2021-09-20 00:00:00.000 202406 1 4057 2021-09-20 00:00:00.000 202406 3 900 2021-09-20 00:00:00.000 Stock 3 4055 2021-09-20 00:00:00.000 202302 3 4057 2021-09-20 00:00:00.000 202302 ...
需要将每个id对应的fid=4055和fid=4057的val值替换为字典中的对应值,期望输出如下:
id fid ts val 1 900 2021-09-20 00:00:00.000 Futures 1 4055 2021-09-20 00:00:00.000 20242222 1 4057 2021-09-20 00:00:00.000 20242222 3 900 2021-09-20 00:00:00.000 Stock 3 4055 2021-09-20 00:00:00.000 20240404 3 4057 2021-09-20 00:00:00.000 20240404 ...
现有低效实现
我写了一段Python代码实现该功能,但它会循环每个contract_id执行一次更新,效率很低:
for contract_id in id_to_contract_date_map: contract_ids_contract_date = id_to_contract_date_map[contract_id] sql = SQL(format_triple_quoted_string(""" update sval set val = {contract_ids_contract_date} where fid in (4055, 4057) and id = {contract_id}; """)).format(contract_id=Literal(contract_id), contract_ids_contract_date=Literal(contract_ids_contract_date)) session.execute(sql_to_string(session, sql))
请问有没有更高效的实现方式?
内容的提问来源于stack exchange,提问作者user21641220
相关产品推荐
相关产品推荐

