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

Python与MySQL类型转换错误:update函数执行失败求助

错误原因及解决方法

核心问题1:SQL占位符与参数数量不匹配

你的edit_details函数里,SQL语句有3个%s占位符,但只传了2个参数,直接导致MySQL无法解析参数,触发类型转换错误。另外,UPDATE语句执行后调用fetchall()完全多余——UPDATE操作不会返回查询结果集。

修正后的edit_details函数

def edit_details(new_typeofcard, new_card_no, original_card_no):
    # 三个占位符对应三个参数:新卡类型、新卡号、原始卡号(用来定位要更新的记录)
    c.execute("UPDATE card_type SET typeofcard=%s, card_no=%s WHERE card_no=%s", 
              (new_typeofcard, new_card_no, original_card_no))
    mydb.commit()
    # UPDATE无结果返回,无需fetchall()
    return None

核心问题2:变量覆盖导致WHERE条件失效

在update函数中,你把用来定位记录的原始card_no覆盖成了用户输入的新值,既找不到要更新的目标记录,还进一步加剧了参数不匹配的问题。

修正后的update函数关键片段

if selected_result:
    typeofcard = selected_result[0][0]
    original_card_no = selected_result[0][1]  # 保留原始卡号作为WHERE条件

    col1, col2 = st.columns(2)
    with col1:
        new_typeofcard = st.text_input("Enter type:", typeofcard)
    with col2:
        new_card_no = st.text_input("Card Number:", original_card_no)  # 用新变量存修改后的卡号

    if st.button("Update"):
        try:
            # 传入三个参数:新类型、新卡号、原始卡号
            edit_details(new_typeofcard, new_card_no, original_card_no)
            st.success("Successfully updated")
        except Exception as e:
            st.error("Update failed. Reason: {}".format(e))

额外建议

如果card_no字段可能存在重复值,建议改用view_only_id()返回的唯一ID作为WHERE条件,这样更新操作会更精准,避免误改其他记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:15:33