Python采集DHT22数据存入MariaDB时cur.execute不执行问题求助
问题排查与修复方案
- 首先修复异常捕获逻辑,你的代码用了裸
except语句,会吞掉所有错误信息,完全无法定位失败原因,先修改内部异常捕获代码输出具体报错:
把原插入部分的代码
try: cur.execute("INSERT INTO messstation (uhrzeit,luftfeuchtigkeit, raumtemperatur) VALUES (?, ?, ?)", (dt_string, temperature_c, humidity)) print("h") conn.commit() except: print("Test")
修改为
try: # 执行前先验证连接是否存活,支持自动重连 conn.ping(reconnect=True) cur.execute("INSERT INTO messstation (uhrzeit,luftfeuchtigkeit, raumtemperatur) VALUES (?, ?, ?)", (dt_string, temperature_c, humidity)) print("h") conn.commit() except Exception as e: print(f"插入失败,错误信息:{e}")
运行修改后的代码即可看到具体报错原因,常见报错对应解决方案如下:
- 报错提示时间格式不匹配:确认
messstation表的uhrzeit字段类型,如果是datetime类型,需要把你当前的时间格式化字符串从"%d/%m/%Y %H:%M:%S"改成MariaDB默认支持的"%Y-%m-%d %H:%M:%S",日/月/年的格式不符合数据库datetime字段的默认解析规则,是这类插入失败的高频原因。 - 报错提示连接断开/无有效连接:你在循环外提前建立了数据库连接,长时间闲置会被MariaDB自动断开,除了上面添加的
conn.ping(reconnect=True)之外,也可以把数据库连接的建立逻辑放到循环内部,每次插入前新建连接、用完关闭,彻底避免闲置断连问题。 - 报错提示表/字段不存在:确认你连接的
messstation库中存在同名表,且字段名拼写和SQL语句中的完全一致,没有拼写错误。
修复后完整代码示例
import time import board import adafruit_dht import mariadb from datetime import datetime dhtDevice = adafruit_dht.DHT22(board.D17) x = 0 while x < 5: x = x+1 time.sleep(2.0) try: # 读取传感器数据 temperature_c = dhtDevice.temperature humidity = dhtDevice.humidity print('Temp', temperature_c) print('Humidty:', humidity) now = datetime.now() # 修改为数据库兼容的时间格式 dt_string = now.strftime("%Y-%m-%d %H:%M:%S") try: # 每次插入前新建连接,避免闲置断开 conn = mariadb.connect( user="root", password="password", host="localhost", database="messstation") cur = conn.cursor() cur.execute("INSERT INTO messstation (uhrzeit,luftfeuchtigkeit, raumtemperatur) VALUES (?, ?, ?)", (dt_string, temperature_c, humidity)) print("h") conn.commit() cur.close() conn.close() except Exception as e: print(f"插入失败:{e}") except Exception as e: print(f"传感器读取失败:{e}") pass
内容的提问来源于stack exchange,提问作者Alessandro
相关产品推荐
相关产品推荐

