PostgreSQL更新仅写入字符串最后一个字符问题排查求助
问题根源与解决方案
核心原因
你遇到的问题是构造executemany的参数列表时错误拆分了输入字符串:如果把用户输入的完整地址字符串直接遍历生成元组,会把字符串拆成单个字符的元组列表。executemany会循环执行UPDATE语句,每次用一个字符覆盖字段值,最终只剩最后一个字符留存。
举个例子,输入"aaa\nbbb"会被错误拆成:
[('a',), ('a',), ('a',), ('\n',), ('b',), ('b',), ('b',)]
执行7次UPDATE后,字段值会被最后一个'b'覆盖。
修复步骤
修正参数构造逻辑:将完整的地址字符串作为单个元组的元素,参数列表应该是包含一个元组的列表(如果仅更新单条记录):
# 正确的参数构造 user_address = request.form['address'] # 确认此处拿到的是完整的"aaa\nbbb" target_user_id = 1 # 替换为你实际要更新的用户ID params = [(user_address, target_user_id)]执行更新语句:使用修正后的参数调用
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)验证参数结构:调试时打印
params的内容,确认它是[(完整字符串, 目标ID)],而非单个字符的元组集合。
内容的提问来源于stack exchange,提问作者winter
相关产品推荐
相关产品推荐

