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

RPi+DHT22温湿度监测Python代码:MySQL变量插入失败求助

解决树莓派DHT22数据插入MySQL的变量引用问题

嘿,我之前用树莓派搭DHT22温湿度监测系统的时候,也踩过MySQL插入变量的坑!你说的只能插纯字符串、变量插不进去的问题,大概率是直接把变量硬拼进SQL语句里了——要么是数据类型处理不对,要么没用到安全的参数化查询方式。

最安全且不易出错的方法:参数化查询

MySQLdb支持用%s作为占位符的参数化查询,它会自动处理不同数据类型的格式(比如数字不用加引号,字符串自动加),还能避免SQL注入风险,这是首选方案。

给你改好的完整代码示例:

import time
import MySQLdb

time.sleep(2)

# 模拟传感器采集到的数据
temperature = 60.0
humidity = 30.0
IP_Add = "123.456.78.9"
location = "basem"

# 替换成你的数据库连接信息
db = MySQLdb.connect(
    host="你的数据库IP",
    user="数据库用户名",
    passwd="数据库密码",
    db="要写入的数据库名"
)

# 创建游标对象
cursor = db.cursor()

# 用%s作为占位符,对应后面的变量顺序
insert_sql = """INSERT INTO 你的表名 (temperature, humidity, ip_address, location) 
                VALUES (%s, %s, %s, %s)"""

try:
    # 把变量放进元组,传给execute方法
    cursor.execute(insert_sql, (temperature, humidity, IP_Add, location))
    # 关键!一定要提交事务,否则数据不会真正写入数据库
    db.commit()
    print("温湿度数据成功写入数据库")
except Exception as e:
    # 出错时回滚事务,避免脏数据
    db.rollback()
    print(f"插入失败,错误信息:{str(e)}")

# 用完记得关闭游标和连接
cursor.close()
db.close()

你可能犯的常见错误(不推荐的写法)

如果你之前是直接拼接字符串,比如这样:

# 错误示例!不要这么写
insert_sql = "INSERT INTO 表名 VALUES (" + str(temperature) + ", '" + humidity + "')"

这种写法不仅容易因为数据类型拼接报错(比如数字转字符串的问题),如果location这类字符串变量里包含单引号,直接就会导致SQL语法错误,还存在SQL注入的安全隐患。

额外注意事项

  • 确保你的MySQL表字段类型和变量匹配:比如temperature是浮点数,表对应字段要设为DECIMAL(5,2)或FLOAT;IP_Add和location设为VARCHAR(50)这类字符串类型。
  • 运行代码前,确认树莓派能正常连接到MySQL服务器(防火墙、权限都要设置好)。
  • 用try-except捕获异常,方便快速定位问题(比如字段名写错、数据库连接失败等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:19:14