Python操作PostgreSQL参数化插入查询出现语法错误求助
排查PostgreSQL参数化查询报错的原因
嘿,问题出在参数占位符的使用上!你用了?作为占位符,但psycopg2(Python连接PostgreSQL的驱动)并不支持这种写法,它的参数占位符是%s——这是和SQLite等其他数据库驱动的关键区别,也是导致你报错的核心原因。
修正后的代码
把execute语句里的?替换成%s就可以正常运行了,完整函数如下:
import psycopg2 def insert_data(time, price): con = psycopg2.connect(database="", user="", password="", host="", port="5432") print("Database opened successfully") cur = con.cursor() # 用%s作为参数占位符 cur.execute("insert into paxos (date, price) values (%s, %s)", (time, price)) con.commit() print("Record inserted successfully") con.close() insert_data("2020-04-09 14:39:58.145804", "$1,664.08")
额外注意点
- psycopg2会自动帮你处理参数的类型转换和引号包裹,所以不需要像非参数化查询那样给字符串加单引号,同时还能避免SQL注入风险。
- 确保你的
date字段类型和传入的time字符串格式匹配(比如timestamp类型),如果类型不匹配可能会出现新的报错,但这已经不是语法问题了。
内容的提问来源于stack exchange,提问作者Raja Wajahat
相关产品推荐
相关产品推荐

