如何使用Python变量更新MySQL数据库?
问题原因
你直接把Python变量写在SQL字符串里时,MySQL服务器会将hot_water_temp识别为数据表的列名,而非Python代码中的本地变量——毕竟SQL语句是发送到MySQL服务器执行的,服务器无法识别你Python环境里的变量,因此才会抛出“未知列”的错误。
正确的变量传递方法
有两种安全规范的方式将Python变量传入SQL语句:
方式1:使用位置占位符%s
这是mysql-connector官方推荐的参数化查询方式,先用%s占据变量位置,再将变量作为第二个参数传入execute()方法:
# 假设hot_water_temp是你已定义好的变量 mycursor.execute( "UPDATE enviromental SET temp = %s WHERE room = 'Hot Water Tank A'", (hot_water_temp,) ) mydb.commit()
注意:这里的%s是SQL参数占位符,并非Python的字符串格式化符号,不需要加引号,驱动会自动处理类型转换和特殊字符转义。
方式2:使用命名占位符
如果需要传递多个变量,使用命名占位符会更清晰,避免顺序混乱:
update_data = { "temp_value": hot_water_temp, "room_name": "Hot Water Tank A" } mycursor.execute( "UPDATE enviromental SET temp = %(temp_value)s WHERE room = %(room_name)s", update_data ) mydb.commit()
重要提醒
绝对不要用字符串拼接(比如f"UPDATE ... SET temp = {hot_water_temp}")的方式插入变量,这种写法会引发SQL注入漏洞,同时还可能出现数据类型不匹配、特殊字符转义失败等问题。
内容的提问来源于stack exchange,提问作者Paul Lavender
相关产品推荐
相关产品推荐

