首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在存储到数据库中的重复数据

正在存储到数据库中的重复数据
EN

Stack Overflow用户
提问于 2012-11-05 03:38:11
回答 1查看 231关注 0票数 1

当我运行我的脚本时,我正在处理数据库中重复的条目,我想知道我可能做错了什么。

硬件

我有一个仪器连接到我的覆盆子Pi通过串行通讯115,200。仪器每秒钟输出一行数据,我想将这些数据存储到数据库中。每一行都以\n结尾。

软件

Python2.7.3rc2

PySerial

PostgreSQL 9.1

Debian Wheezy

数据库中有一个名为wattsup的表,我创建了该表:

代码语言:javascript
复制
CREATE TABLE wattsup (
    wattsuplocation text
    wattsuptime timestamp
    wattsupvalue numeric
);

我的Python脚本看起来像:

代码语言:javascript
复制
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()

它通常有效,但我得到一些重复的数据,我不明白。当我查询数据库时,我可以找到类似的数据。

代码语言:javascript
复制
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个条目发生一次,这似乎改善了情况。

知道会发生什么事吗?我很困惑。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2012-11-17 09:40:40

一些想法( 1)您可以在while循环中添加一些等待语句。现在它正在运行循环,使用所有的处理器时间( 2),您使用的是串行到USB转换器,这些设备有时会缓冲数据。3)星载UART还缓冲数据4)当执行读行时,它取决于用作终止字符的是什么: Cr、LF或CrLF 5),您可以尝试使用Read,然后读入自己的字符串缓冲区并查找第一个终止符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13225613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档