【发布时间】:2016-02-08 03:51:57
【问题描述】:
我是 Python、Raspberry Pi 和 MySQL 的新手,希望您能帮助我。我正在尝试用 Python 编写一个脚本,该脚本可以每秒将数据插入 MySQL 表中。我可以插入数据,但不像我想要的那样定期,我已经尝试了很多,但我找不到我的问题的解决方案。这是我的 Python 代码和插入 MySQL 表的数据:
Python 代码:
#!/usr/bin/env python
import MySQLdb
import time
while True:
db = MySQLdb.connect("localhost", "mauro", "12345", "temps")
curs=db.cursor()
try:
curs.execute ("""INSERT INTO thetemps
values(0, CURRENT_DATE(), NOW(), 28)""")
db.commit()
print "Data committed"
except:
print "Error"
db.rollback()
db.close()
time.sleep(1)
表格结果:
+-----+------------+----------+------+
| id | date | time | temp |
+-----+------------+----------+------+
| 107 | 2015-11-06 | 19:16:41 | 28 |
| 108 | 2015-11-06 | 19:16:42 | 28 |
| 109 | 2015-11-06 | 19:16:45 | 28 |
| 110 | 2015-11-06 | 19:16:46 | 28 |
| 111 | 2015-11-06 | 19:16:47 | 28 |
| 112 | 2015-11-06 | 19:16:48 | 28 |
| 113 | 2015-11-06 | 19:16:56 | 28 |
| 114 | 2015-11-06 | 19:17:00 | 28 |
| 115 | 2015-11-06 | 19:17:03 | 28 |
| 116 | 2015-11-06 | 19:17:05 | 28 |
| 117 | 2015-11-06 | 19:17:06 | 28 |
| 118 | 2015-11-06 | 19:17:07 | 28 |
| 119 | 2015-11-06 | 19:17:08 | 28 |
| 120 | 2015-11-06 | 19:17:09 | 28 |
| 121 | 2015-11-06 | 19:17:10 | 28 |
| 122 | 2015-11-06 | 19:17:11 | 28 |
+-----+------------+----------+------+
如您所见,有时脚本会定期插入数据,有时数据之间有 8 秒的间隔。所以,我的问题是:每次数据之间的间隔是否有可能是 1 秒?我究竟做错了什么? 抱歉英语不好,提前致谢!
【问题讨论】:
-
将
.connect和.close放在while 循环之外,这样就不需要每次都重新初始化。这并不能确保任何事情,但它可能会更加一致。您可以做的另一件事是代替time.sleep,您可以读取表中的最后时间值,然后在其后一秒钟执行您的命令 -
要弄清楚到底发生了什么,你需要 strace(使用 -tt 来获取时间戳)你的 python 进程和 mysqld。如果你只是想猜测,除了已经说过的,
ALTER TABLE thetemps ENGINE=MYISAM如果表是 InnoDB。 Raspberry PI 可能没有足够的 umph 来有效地处理 InnoDB 表。事务提交可能需要一段时间。 -
请不要忘记回来接受您认为对您最有用的答案。它使您、那些试图解决您的问题的人以及整个社区的其他人受益。
-
谢谢@SashaPachev!这使我的脚本可以按我的意愿工作!
标签: python mysql raspberry-pi raspberry-pi2