我正在使用DS18B20温度传感器和树莓派3。我想把日期/时间和温度数据,并把它放入一个sql数据库(稍后将发布到一个网站托管的pi...还没有得到那么远)
我找到了一个python脚本来读取传感器数据,它运行得很好。然后我添加了SQL部分,虽然它看起来工作正常(没有出现错误...),但它似乎根本没有更改数据库。我不知道它是否真的更改了表(我只是没有找对地方),或者它没有(我哪里出错了)
import os # import os module
import glob # import glob module
import time # import time module
import sqlite3
conn = sqlite3.connect('Temperature.db')
c = conn.cursor()
os.system('modprobe w1-gpio') # load one wire comm$
os.system('modprobe w1-therm')
base_dir = '/sys/bus/w1/devices/' # point to the addre$
device_folder = glob.glob(base_dir + '28*')[0] # find device with a$
device_file = device_folder + '/w1_slave' # store the details
def read_temp_raw():
f = open(device_file, 'r')
lines = f.readlines() # read the device de$
f.close()
return lines
def read_temp():
lines = read_temp_raw()
while lines[0].strip()[-3:] != 'YES': # ignore first line
time.sleep(0.2)
lines = read_temp_raw()
equals_pos = lines[1].find('t=') # find temperature i$
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string) / 1000.0 # convert to Celsius
return temp_c
while True:
date= (time.strftime("%Y-%m-%d ") + time.strftime("%H:%M:%S"))
temp=(read_temp())
c.execute("INSERT INTO readings (date,temp) VALUES(?,?)", (date,temp))
conn.close()
break
sqlite3数据库名为Temperature.db,只有一个表“readings”
我真的是新的在这方面,所以任何建议是非常感谢。
1条答案
按热度按时间fhg3lkii1#
无论何时使用Insert或Update语句,都需要将更改提交到数据库。只需在服务器连接上调用
commit()
即可。另外,另一个问题是您关闭了数据库连接。您不希望在while循环中关闭数据库连接,因为在关闭了与数据库的连接后,您将无法向数据库中插入新条目。相反,您可以关闭游标连接,并在需要执行新事务时创建一个新连接。
如果您阅读文档here,
commit()
函数提交当前数据库事务。当您在数据库连接上调用close()
时,它不会提交自上次事务以来的任何更改。一个更好的做法是使用Try-Except子句,如果数据库有问题,该子句将调用
rollback()
。