PostgreSQL批量插入:如何简化VALUES子句的冗长声明?
简化PostgreSQL插入语句的VALUES占位符写法
当然有办法解决这个麻烦!手动敲二十多个%s不仅费时间还容易数错,用动态生成占位符的方式就能彻底搞定,而且完全适配Python连接PostgreSQL的常用驱动psycopg2的语法要求。
核心解决方案:动态生成占位符字符串
你可以根据列表的长度自动生成对应数量的%s占位符,不用一个个手动输入:
# 确保mylist的元素数量和data_core_cftcreport表的字段数完全匹配 placeholder_str = ', '.join(['%s'] * len(mylist)) connection.execute( f'INSERT INTO data_core_cftcreport VALUES ({placeholder_str})', mylist )
原理说明
['%s'] * len(mylist):生成一个和mylist长度一致的%s列表,比如你的列表有29个元素,就会自动生成包含29个%s的列表。', '.join(...):把这个列表用逗号加空格拼接成字符串,最终得到'%s, %s, %s, ...'的格式。- 用f-string将占位符字符串插入SQL语句,效果和手动写一堆
%s完全一致,但彻底避免了手动计数的错误。
额外提示
如果之后需要插入多行数据,更推荐使用executemany方法,效率会更高:
# 示例:插入多条记录,每条记录是一个子列表 many_records = [[1,2,...], [3,4,...], ...] placeholder_str = ', '.join(['%s'] * len(many_records[0])) connection.executemany( f'INSERT INTO data_core_cftcreport VALUES ({placeholder_str})', many_records )
内容的提问来源于stack exchange,提问作者sretko
相关产品推荐
相关产品推荐

