当我运行我的脚本时,我在数据库中添加了重复的条目,我想知道我可能做错了什么。
硬件
我有一台仪器通过串行通信连接到我的 Raspberry Pi,频率为 115,200。仪器每秒输出一行数据,我想将这些数据存储到数据库中。每行以 \n 结束。
软件
Python 2.7.3rc2
PySerial
PostgreSQL 9.1
Debian Wheezy
该数据库有一个我创建的名为 wattsup 的表:
CREATE TABLE wattsup (
wattsuplocation text
wattsuptime timestamp
wattsupvalue numeric
);
我的 Python 脚本如下所示:
import serial
import time
import psycopg2
ser = serial.Serial('/dev/ttyUSB0', 115200)
Location = 'A'
conn = psycopg2.connect("dbname='mydb' user='thotchi'")
cur = conn.cursor()
Insert = "INSERT INTO wattsup (wattsuplocation, wattsuptime, wattsupvalue) VALUES (%s, %s, %s)"
while 1:
line = ser.readline()
DataArray = line.split(',') #CSV output
if len(DataArray) != 21:
continue
else:
Time = time.strftime("%Y-%m-%d %H:%M:%S")
Watts = float(DataArray[3]) / 10
cur.execute(Insert, (Location, Time, Watts))
conn.commit()
它通常有效,但我在我不理解的数据中得到了一些重复。当我查询数据库时,我可以找到类似的数据。
A, 2012-11-04 18:00:00, 5.0
A, 2012-11-04 18:00:01, 5.1
A, 2012-11-04 18:00:02, 5.0
A, 2012-11-04 18:00:03, 4.9
A, 2012-11-04 18:00:04, 5.0
A, 2012-11-04 18:00:05, 5.0
A, 2012-11-04 18:00:05, 5.0
A, 2012-11-04 18:00:05, 5.0
A, 2012-11-04 18:00:05, 5.0
A, 2012-11-04 18:00:06, 5.1
注意有重复数据(A, 2012-11-04 18:00:05, 5.0)。我知道仪器只在 1 秒输出数据,所以我确定它不是仪器。我尝试对代码进行一些更改,以便每 10 个条目发生一次提交,这似乎改善了这种情况。
知道会发生什么吗?我难住了。
谢谢!