我正在使用在Raspberry Pi 2上运行的单线温度传感器研究温度传感器网络。我正在关注this tutorial并且随着我的进展,我意识到他的设置是针对一个温度传感器,而我的设置需要使用多个传感器。
由于有多个传感器,我还需要能够将传感器彼此区分开来。为此,我想在SQLite表中有3列。我在执行Python脚本时遇到错误,该脚本应该记录传感器的读数,日期和时间以及传感器名称。
这是问题,当我配置python脚本向表中写入三个值时,我收到一个错误。
以下是执行
时出错的代码#!/usr/bin/env python
import sqlite3
import os
import time
import glob
# global variables
speriod=(15*60)-1
dbname='/var/www/templog.db'
# store the temperature in the database
def log_temperature(temp):
conn=sqlite3.connect(dbname)
curs=conn.cursor()
sensor1 = 'Sensor1'
curs.execute("INSERT INTO temps values(datetime('now'), (?,?))" (temp, sensor1))
# commit the changes
conn.commit()
conn.close()
答案 0 :(得分:4)
"INSERT INTO temps values(datetime('now'), (?,?))" (temp, sensor1)
打破这一点,你会看到这会创建一个字符串,然后Python的括号显示为函数调用。然而,这是荒谬的,因为你有一个你试图调用的字符串,就像它是一个函数。因此,你得到的关于str
无法调用的错误,如果你没有Python经验,这肯定有点神秘。基本上你错过了一个逗号:
curs.execute("INSERT INTO temps values(datetime('now'), (?,?))", (temp, sensor1))
现在,您将正确填写?
个占位符。
通常“str
不可调用”错误将是错误的结果,例如这个或重复的变量名称(你认为你正在调用一个函数,但变量确实包含一个字符串),所以从查找开始当你看到这种类型的错误时会遇到这些问题。
答案 1 :(得分:2)
你必须在那里放,
:
curs.execute("INSERT INTO temps values(datetime('now'), (?,?))" , (temp, sensor1))
将
?
作为占位符放在您想要使用值的任何位置,然后在游标的{{ 第二个参数 中提供一个值元组。 1}}方法
如您所见,您需要提供元组作为函数execute()
的第二个参数