Raspberry Pi MYSQL数据库异常

时间:2018-11-14 17:20:26

标签: python mysql raspberry-pi

我希望将其发布到我的Raspberry Pi上的数据库中,如果我使用20.0或类似的方式输入温度和湿度,则下面的代码可以正常工作,但是如果我使用诸如getTemperature()之类的任何方法,则该代码将返回回滚错误,并且不会向我解释错误的原因。我不确定为什么要这样做,因为NOW()也是一种方法并且可以正常工作。

关于如何解决此问题的任何想法,以及解决该问题的最佳方法是什么?我对Python还是很陌生,所以我仍在学习,但是我尝试了所有可以找到的示例,但似乎无法使其正常工作。正如我所说的,如果我自己将数据输入语句中而不是尝试从这两种方法中获取数据,它就会起作用。

我还使用以下方法创建了数据库:

  

创建表ca1data(日期DATE,时间TIME,湿度NUMERIC,   温度NUMERIC,请按TEXT);

import fcntl,socket,struct,dweepy,time,platform,random,grovepi,math
import MySQLdb

db=MySQLdb.connect("localhost", "monitor", "password", "temps")
curs=db.cursor()

sensor = 4 

blue = 0    
white = 1 

def getTemp():
    try:
        # This example uses the blue colored sensor. 
        # The first parameter is the port, the second parameter is the type of sensor.
        [temp,humidity] = grovepi.dht(sensor, blue)  
        if math.isnan(temp) == False and math.isnan(humidity) == False:
            return temp

    except IOError:
        return "Error"

def getHumidity(): 
    try:
        # This example uses the blue colored sensor. 
        # The first parameter is the port, the second parameter is the type of sensor.
        [temp,humidity] = grovepi.dht(sensor, blue)  
        if math.isnan(temp) == False and math.isnan(humidity) == False:
            return humidity

    except IOError:
        return "Error"
def getOS():
    return platform.platform()

def post(dic):
    thing = "CurtisBoylanTempCA1" 
    print dweepy.dweet_for(thing, dic)

def getReadings () :
    dict = {}
    dict ["temperature"] = getTemp() ; 
    dict ["humidity"] = getHumidity ()
    return dict

while True:
    dict = getReadings(); 
    post(dict)
    try:
        curs.execute ("""INSERT INTO ca1data 
            values(CURRENT_DATE(), NOW(), getHumidity(), getTemp(), 'ON')""")

        db.commit()
        print "Data committed"

    except:
        print "Error: the database is being rolled back"
        db.rollback()

    time.sleep(5)

1 个答案:

答案 0 :(得分:0)

getHumiditygetTemp是在Python脚本中定义的函数,而CURRENT_DATENOW是SQL知道如何解释的函数。要完成所需的操作,您可以在脚本中执行功能,并将其作为查询值插入到查询中,如下所示:

curs.execute ("""INSERT INTO ca1data 
            values(CURRENT_DATE(), NOW(), %f, %f, 'ON')""" % (getHumidity(), getTemp()))