Python:删除x天以前的mySQL行

时间:2016-02-18 20:03:37

标签: python mysql datetime raspberry-pi

我使用覆盆子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()

我必须从中进行服务器导入,因为它不断抛出不存在的对象的错误。

1 个答案:

答案 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