我希望将其发布到我的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)
答案 0 :(得分:0)
getHumidity
和getTemp
是在Python脚本中定义的函数,而CURRENT_DATE
和NOW
是SQL知道如何解释的函数。要完成所需的操作,您可以在脚本中执行功能,并将其作为查询值插入到查询中,如下所示:
curs.execute ("""INSERT INTO ca1data
values(CURRENT_DATE(), NOW(), %f, %f, 'ON')""" % (getHumidity(), getTemp()))