使用psycopg2向PostgreSQL插入数据时报TypeError: 需字符串/Unicode对象却得元组
报错原因
这个错误来自Python的变量赋值逻辑和psycopg2的接口要求不匹配:
你写的query = "SQL字符串内容", (参数列表) 是Python里的元组打包语法——只要用逗号把两个值隔开再赋值给单个变量,这个变量就会被识别为包含两个元素的元组(第一个元素是SQL文本,第二个元素是参数元组)。
而psycopg2的cursor.execute()要求第一个入参必须是纯SQL格式的字符串,你把整个元组当SQL文本传进去,自然会触发TypeError: argument 1 must be a string or unicode object: got tuple instead的报错。
修正方案
把SQL文本和参数值拆分开,分别作为两个独立参数传给execute()即可,修正后的完整函数逻辑:
def addRecord(self, val1, val2, val3, val4, val5, val6, val7, val8): # 单独存储SQL语句文本,不与参数做打包操作 query = """ INSERT INTO stories ( val1, val2, val3, val4, val5, val6, val7, val8 ) VALUES(%s, %s, %s, %s, %s, %s, %s, %s) """ # execute()接收两个独立参数:SQL文本、对应占位符的参数元组 self.cursor.execute(query, (val1, val2, val3, val4, val5, val6, val7, val8)) self.connection.commit()
你原来的调用代码不需要做任何修改,修正函数逻辑后就可以正常执行插入操作。
内容的提问来源于stack exchange,提问作者Süleyman Ali Akpınar
相关产品推荐
相关产品推荐

