将函数值插入SQLite数据库

时间:2016-02-16 16:10:12

标签: python database sqlite proximitysensor

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()的值实现到表中。即使没有,也许您对如何可视化数据有另一种想法。

1 个答案:

答案 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