You need to enable JavaScript to run this app. 使用psycopg2向PostgreSQL插入数据时报TypeError: 需字符串/Unicode对象却得元组
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 17:15:04