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

PostgreSQL更新仅写入字符串最后一个字符问题排查求助

问题根源与解决方案

核心原因

你遇到的问题是构造executemany的参数列表时错误拆分了输入字符串:如果把用户输入的完整地址字符串直接遍历生成元组,会把字符串拆成单个字符的元组列表。executemany会循环执行UPDATE语句,每次用一个字符覆盖字段值,最终只剩最后一个字符留存。

举个例子,输入"aaa\nbbb"会被错误拆成:

[('a',), ('a',), ('a',), ('\n',), ('b',), ('b',), ('b',)]

执行7次UPDATE后,字段值会被最后一个'b'覆盖。

修复步骤

  1. 修正参数构造逻辑:将完整的地址字符串作为单个元组的元素,参数列表应该是包含一个元组的列表(如果仅更新单条记录):

    # 正确的参数构造
    user_address = request.form['address']  # 确认此处拿到的是完整的"aaa\nbbb"
    target_user_id = 1  # 替换为你实际要更新的用户ID
    params = [(user_address, target_user_id)]
    
  2. 执行更新语句:使用修正后的参数调用executemany,或者如果仅更新单条记录,直接用execute更高效:

    # 单条更新推荐用execute
    cursor.execute("UPDATE person SET address = %s WHERE id = %s", (user_address, target_user_id))
    # 若需批量更新多条记录,参数列表应为每条记录对应一个元组
    # params = [(addr1, id1), (addr2, id2), ...]
    # cursor.executemany("UPDATE person SET address = %s WHERE id = %s", params)
    
  3. 验证参数结构:调试时打印params的内容,确认它是[(完整字符串, 目标ID)],而非单个字符的元组集合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 12:23:20