Hej家伙,
我和我的一位朋友正在开展一个我们想要实现的小项目。到目前为止,我们已经建立了一个小型传感器,可识别我们车库中是否存在汽车,并与Arduino Nano一起运行超声波传感器。然后传感器通过Xbee将一个整数(1 = car,0 = no car)发送到我们起居室中运行Python的RaspberryPi。
我们还可以使用以下代码查看屏幕上的数据,给出我们的行或0或1:
import serial
while True:
ser = serial.Serial(“/dev/ttyAMA0”, 9600, timeout=1)
response = ser.read()
print response
在查看了一些Python和SQLite3代码后,我们认为如果我们能够看到一辆车何时到达我们的车库并离开,那真的很酷。 所以我做了一些研究,发现可以通过MySQL或SQLite数据库来实现。
我们尝试了一下并观看了很多教程,我们现在能够创建表并将数据插入其中。不幸的是,到目前为止,这些数据是由我们手动编写的,而不是由函数动态插入到表中。
我们关于数据库的代码如下:
import sqlite3
import time
import datetime
import serial
def Main():
try:
con = sqlite3.connect(‘test.db’)
cur = con.curson()
cur.execute(‘CREATE TABLE Cars(Id INT, Time TEXT, Status INT)’)
cur.execute(“INSERT INTO Cars VALUES(1, datettime(), 1)”)
cur.execute(“INSERT INTO Cars VALUES(2, datettime(), Reading())”)
con.commit()
cur.execute(“SELECT * FROM Cars”)
data = cur.fetchall()
for row in data
print row
except sqlite3.Error, e:
if con:
con.rollback()
print “There’s a problem with your SQLite”
finally:
if con:
con.close()
def Reading():
ser = serial.Serial(“/dev/ttyAMA0”, 9600, timeout=1)
response = ser.read()
return response
if __name__ == ‘__main__’:
Main()
简而言之:我们桌子的每一行都应该显示一个单独的Id,当前时间和1或0,这取决于车库里的传感器前面是否有一辆车。 当我们尝试运行此代码时,我们始终会遇到您的SQL问题"作为一条信息。
也许你们其中一个人知道到目前为止我们做错了什么,或者我们如何能够将函数Reading()的值实现到表中。即使没有,也许您对如何可视化数据有另一种想法。
答案 0 :(得分:1)
您希望将函数的结果值插入到数据库中。 SQLite不了解函数本身。你应该这样做:
cur.execute('INSERT INTO Cars VALUES(1, ?, 1)',
(datetime.now().strftime('%Y%m%d%H%M%S'),))
cur.execute('INSERT INTO Cars VALUES(2, ?, ?)',
(datetime.now().strftime('%Y%m%d%H%M%S'),Reading()))
如果您想要存储Python日期时间而不是文本值,您可以查看使用适配器,如下所述:https://docs.python.org/2/library/sqlite3.html#default-adapters-and-converters