Python 插入 SQLite

Python insert SQLite

我有以下问题:

我想使用 SQLite3 和 Python 插入我的 RPI 的温度。 我要使用的 python 脚本:

import subprocess
import os
import sqlite3 as lite
import datetime
import sys
import time

def get_temperature():
    "Returns the temperature in degrees C"
    try:
        s = subprocess.check_output(["cat","/sys/class/thermal/thermal_zone0/temp"])
        return s[:-1]
    except:
        return 0



try:
    con = lite.connect('/www/auslastung.s3db')
    cur = con.cursor()

    temp = int(get_temperature())
    zeit = time.strftime('%Y-%m-%d %H:%M:%S')

    cur.execute("INSERT INTO 'temperatur' ('Wert', 'Zeit') VALUES (%s, %s)", (temp, zeit))

    con.commit()

except lite.Error, e:

    if con:
       con.rollback()
    print "Error %s" % e.args[0]
    sys.exit(1)

finally:

    if con:
       con.close()

每次我想运行它时,我都会收到错误消息:

Error near "%": syntax error

我应该怎么做才能解决这个问题?

替换

cur.execute("INSERT INTO 'temperatur' ('Wert', 'Zeit') VALUES (%s, %s)", (temp, zeit))

cur.execute("INSERT INTO 'temperatur' ('Wert', 'Zeit') VALUES (?, ?)", (temp, zeit))

您的 finally 子句也有问题。如果 con 一开始就没有分配(例如,如果目录 /www/ 不存在,那么 con = lite.connect('/www/auslastung.s3db') 就会失败),它将失败并显示错误 NameError: name 'con' is not defined。您可以执行以下操作来避免此问题:

con = None
try:
    # ...
except lite.Error, e:
    if con is not None:
       con.rollback()
    # ...
finally:
    if con is not None:
       con.close()

您还可以替换:

cur.execute("INSERT INTO 'temperatur' ('Wert', 'Zeit') VALUES (%s, %s)", (temp, zeit))

cur.execute("INSERT INTO 'temperatur' ('Wert', 'Zeit') VALUES (%s, %s)" % (temp, zeit))

@nwk 或我的回答应该取决于偏好。