You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用psycopg2操作PostgreSQL触发StringDataRightTruncation报错求助

报错原因

该psycopg2.errors.StringDataRightTruncation报错的核心是PostgreSQL的vulnerabilities表中,description字段被定义为character varying(255)类型,最多仅支持存储255个字符,你要写入的漏洞描述文本长度远超该限制,导致写入被拒绝。

解决方案

优先选择以下两种方案调整数据库字段配置:

  • 方案1(最推荐):修改字段为TEXT类型
    漏洞描述属于不定长的长文本,无需限制存储长度,PostgreSQL的TEXT类型性能和varchar无差异,且无长度限制,执行以下SQL修改字段即可:
    ALTER TABLE vulnerabilities ALTER COLUMN description TYPE TEXT;
    
  • 方案2:扩大varchar字段长度
    如果你确实需要保留varchar类型,可根据业务侧最长的漏洞描述长度,把字段长度调整到足够大,比如调整为2000长度:
    ALTER TABLE vulnerabilities ALTER COLUMN description TYPE character varying(2000);
    

额外代码优化建议

你当前使用f-string拼接SQL的写法存在严重的SQL注入风险,且手动替换单引号的方式无法覆盖所有特殊字符场景,建议改为psycopg2官方推荐的参数化查询写法,修改后代码如下:

def add_json(value):
  id = random.randint(1,10000)
  for val in value['vulns']:
    # 用参数化查询后无需手动处理单引号,原异常处理逻辑可删除
    des = val['description']
    print(des)    
    cursor.execute(
        "INSERT INTO vulnerabilities (id,name,severy,ref,description) VALUES (%s, %s, %s, %s, %s)",
        (random.randint(1,10000), val['name'], val['severity'], '{' + ','.join(val['ref']) + '}', des)
    )
conn.commit()
conn.close()

参数化查询会自动处理所有特殊字符的转义,既避免SQL注入风险,也不会因为文本中包含特殊符号触发SQL语法错误。


内容的提问来源于stack exchange,提问作者Bumin Qagan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:57:03