我的代码:
date_today = datetime.date.today()
date_curr_year = date_today.year
date_curr_month = date_today.month
date_curr_month_1d = datetime.date(day=1, month=date_curr_month, year=date_curr_year)
date_prev_month = date_curr_month_1d - datetime.timedelta(days=1)
string_date_prev_month = date_prev_month.strftime("%Y-%m-1")
string_date_curr_month_1d = date_curr_month_1d.strftime("%Y-%m-%d")
try:
#Query:
q_getstuff = "SELECT `timestamp`, `number`, `url`, `procedure` FROM transaction WHERE `number` IS NOT NULL AND (`timestamp` >= \'" + string_date_prev_month + "\' AND `timestamp` < \'" + string_date_curr_month_1d + "\')"
print q_getstuff
#Database Connection
con = mdb.connect(hostname, username, password, database)
cur = con.cursor()
cur.execute(q_getstuff)
result = cur.fetchall()
numrows = cur.rowcount
for row in result:
print row
except mdb.Error, e:
print "Error " + str(e.args[0]) + " " + str(e.args[1])
sys.exit(1)
con.close()
整个日期垃圾只是为了获得本月的第一个日期,以及上个月的第一个日期。该查询应该从上个月获取数据。如果有更好的方法,请告诉我。
以下是print q_getstuff
:
SELECT `timestamp`, `number`, `url`, `procedure` FROM transaction
WHERE `number` IS NOT NULL AND (`timestamp` >= '2015-02-1' AND
`timestamp` < '2015-03-01')
请注意,字段名称以波浪号括起来。看来没错,没有错误。如果我打印出numrows
,则返回2,如 2行。
问题:
我复制了print q_getstuff
的输出,然后直接将其粘贴(没有编辑)到MySQL中,它返回 78行。
显然代码有问题,但我不确定发生了什么。我哪里出错了?
答案 0 :(得分:1)
你可以尝试这样的事情:
q_getstuff = "SELECT timestamp, number, url, procedure FROM transaction WHERE number IS NOT NULL AND (timestamp >= '%s' AND timestamp < '%s')" % (string_date_prev_month, string_date_curr_month_1d)
答案 1 :(得分:1)
构建查询的方式似乎很奇怪。更标准的方法是:
q_getstuff = "SELECT timestamp, number, url, procedure FROM transaction WHERE number IS NOT NULL AND (timestamp >= ? AND timestamp < ?)"
cur.execute(q_get_stuff, (string_date_prev_month, string_date_curr_month_1d))
数据库API将负责正确引用和转义变量。
答案 2 :(得分:0)
我不知道怎么做,但重新启动一切(数据库,计算机)修复它。
猜测它毕竟不是代码,更多的是与MySQL本身有关。