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

如何将SCD40传感器字典数据存入SQLite数据库表?

问题分析与解决

你的代码报错核心有两个问题:

  1. SQL语法错误:VALUE是拼写错误,正确关键字应为VALUES
  2. 字段与值映射错误:(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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 09:10:02