如何修正Python批量插入PostgreSQL时的INSERT语句语法错误?
如何修正Python批量插入PostgreSQL时的INSERT语句语法错误?
嗨,这个问题我之前也踩过坑!你遇到的语法错误,根源在于psycopg2(Python连接PostgreSQL的常用驱动)不支持?作为参数占位符,它用的是%s来做参数占位——哪怕是数字类型的参数也得用这个格式。
你原来的代码里用了?,PostgreSQL根本识别不了这种占位符,所以才会报语法错误。把占位符换成%s就能解决问题啦,修正后的代码如下:
values = [(id, 2940, ts, False) for id in identities_to_deactivate] # 把占位符从?替换为psycopg2支持的%s sql = "INSERT INTO sval (id, column2, column3, column4) VALUES (%s, %s, %s, %s)" cursor.executemany(sql, values) conn.commit()
另外再给你提个小建议:如果你的identities_to_deactivate列表特别长,用executemany虽然没问题,但也可以考虑一次性插入多条数据的写法(把多个VALUES组合并在一起),性能会更优,示例代码如下:
# 生成对应数量的占位符组 placeholders = ", ".join(["(%s, %s, %s, %s)"] * len(values)) # 拼接成批量插入的SQL语句 sql = f"INSERT INTO sval (id, column2, column3, column4) VALUES {placeholders}" # 把二维列表展开成一维,传入execute方法 cursor.execute(sql, [item for sublist in values for item in sublist]) conn.commit()
不过如果数据量不是特别大,用executemany就足够方便啦。
备注:内容来源于stack exchange,提问作者killerbee88
相关产品推荐
相关产品推荐

