如何将SCD40传感器字典数据存入SQLite数据库表?
问题分析与解决
你的代码报错核心有两个问题:
- SQL语法错误:
VALUE是拼写错误,正确关键字应为VALUES - 字段与值映射错误:
(key)和VALUE(key)的写法完全不符合SQL插入逻辑,无法将字典数据正确关联到表字段。
正确实现方式
以下两种方案适配你传入的字典格式,可直接使用:
方案1:位置占位符(?)
需保证字典值的顺序与表字段顺序完全匹配(co2、device_id、timestamp、temperature、humidity):
# 假设已获取传感器发送的data字典 data = {'co2': 661, 'device_id': 'pico_1', 'timestamp': 1739488255, 'temperature': 21.58999, 'humidity': 30.71489} # 明确列出所有字段,用?作为值的占位符 sql = '''INSERT INTO sensor_readings (co2, device_id, timestamp, temperature, humidity) VALUES (?, ?, ?, ?, ?)''' # 按字段顺序提取字典值,传入execute方法 cursor.execute(sql, (data['co2'], data['device_id'], data['timestamp'], data['temperature'], data['humidity'])) # 提交事务,确保数据写入数据库 conn.commit()
方案2:命名占位符(更易维护)
无需关注字段顺序,直接通过字典键匹配占位符:
data = {'co2': 661, 'device_id': 'pico_1', 'timestamp': 1739488255, 'temperature': 21.58999, 'humidity': 30.71489} # 用:字段名作为占位符,与字典键一一对应 sql = '''INSERT INTO sensor_readings (co2, device_id, timestamp, temperature, humidity) VALUES (:co2, :device_id, :timestamp, :temperature, :humidity)''' # 直接传入字典作为参数 cursor.execute(sql, data) conn.commit()
额外注意事项
- 确保
sensor_readings表结构字段类型与数据匹配:co2:INTEGER类型device_id:TEXT类型timestamp:INTEGER类型(存储Unix时间戳)temperature、humidity:REAL类型
- 必须调用
conn.commit()提交事务,否则数据不会持久化到数据库 - 若服务器使用Python标准库
sqlite3,上述两种写法均完全支持
内容的提问来源于stack exchange,提问作者tomfitzphilly
相关产品推荐
相关产品推荐

