psycopg2操作PostgreSQL插入数据报列不存在错误如何解决
问题根因
- 核心错误是使用
str.format()直接拼接SQL语句,字符串类型的参数拼接后没有被引号包裹,数据库会将其识别为列名而非字段值,因此触发「变量不属于表列」的报错。这种写法还存在SQL注入的安全风险,是数据库操作的禁忌写法。 - 单
VALUE报错是你修改代码时误将SQL关键字VALUES拼写为单数VALUE导致的语法错误。 - 额外注意你代码中的列名
messae、messaeg_id存在明显的拼写嫌疑,大概率和你实际表结构的message、message_id不匹配,也会触发列不存在报错。
修复方案
直接使用psycopg2内置的参数化查询语法,不要手动拼接SQL字符串,参考代码如下:
cursor.execute( "INSERT INTO reviews(name, messae, date, time, location, messaeg_id) VALUES (%s, %s, %s, %s, %s, %s)", (naam, review, datumm, tijdd, locatie, review_id) ) # 若未开启自动提交,执行完需补充事务提交操作:conn.commit()
psycopg2会自动根据参数的类型处理引号、转义特殊字符,完全避免值被识别为列名的问题,同时能规避SQL注入风险。
内容的提问来源于stack exchange,提问作者MatyaSw
相关产品推荐
相关产品推荐

