插入 SQLite 数据库时 str 对象不可调用

Gra*_*ams 2 python sqlite string

我正在使用在 Raspberry Pi 2 上运行的 onewire 温度传感器开发温度传感器网络。我正在遵循本教程,随着我的进行,我意识到他的设置适用于一个温度传感器,而我的设置需要与多个传感器。

由于拥有多个传感器,我还需要能够区分这些传感器。为此,我希望 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()
Run Code Online (Sandbox Code Playgroud)

shu*_*e87 6

"INSERT INTO temps values(datetime('now'), (?,?))" (temp, sensor1)
Run Code Online (Sandbox Code Playgroud)

分解它,你会发现这创建了一个字符串,然后括号对 Python 来说似乎是一个函数调用。然而,这是无意义的,因为你有一个字符串,你试图像调用函数一样调用它。因此,你会得到关于不可调用的错误str,如果你没有使用 Python 的经验,这肯定有点神秘。本质上你缺少一个逗号:

curs.execute("INSERT INTO temps values(datetime('now'), (?,?))", (temp, sensor1)) 
Run Code Online (Sandbox Code Playgroud)

现在您将?正确填写占位符。

通常,“str不可调用”错误是由于诸如 this 或重复的变量名之类的拼写错误造成的(您认为您正在调用函数,但该变量实际上包含字符串),因此,当您看到此类型时,首先要查找这些问题的错误。