我使用覆盆子pi与rasbpian wheezy发行无头。我目前有一个运行python脚本的cronjob将当前温度和日期时间放在mySQL数据库中 (table:tempLog,attributes:datetime,temperature float(5,2))。
我想删除5天(num天是任意的)旧的行,我在python中遇到这个问题。这是代码,它不长。
import os
import time
import datetime
import glob
import MySQLdb
from time import strftime
from datetime import timedelta
from datetime import date
# Variables for MySQL
db = MySQLdb.connect(host="localhost", user="root",passwd="password", db="temp_database")
cur = db.cursor()
del_basedate = datetime.datetime.today() - timedelta(1)
# DATE_SUB(NOW() , INTERVAL 1 DAY)
try:
cur.execute("DELETE FROM tempLog WHERE datetime.date.day = del_basedate")
print "Delete successful"
except:
print "An error occured in: deleteRows.py"
finally:
cur.close()
db.close()
我必须从中进行服务器导入,因为它不断抛出不存在的对象的错误。
答案 0 :(得分:0)
您需要了解编码上下文:
del_basedate = datetime.datetime.today() - timedelta(1)
^^----python variable
cur.execute("DELETE FROM tempLog WHERE datetime.date.day = del_basedate")
text string with the letters "d", "e", "l", "_", etc... --- ^^^
Python并不神奇,并且不会在字符串中翻找,以查看该字符串中的任何文本是否像python变量一样。因此,您有效地告诉您的数据库将datetime.date.day
与某个未知/未定义的del_basedate
字段进行比较。
尝试
cur.execute("DELETE FROM tempLog WHERE datetime.date.day = '" + del_basedate + "'")
^^^^^^^^^^^^^^^^^^
请注意字符串中的额外引号。如果没有它们,您将与= 2016-02-18
进行比较,这是一个数学运算,并由数据库解析/执行为= 1996