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
相关产品推荐
相关产品推荐

