Python:MySQL中代码查询和查询之间的区别

时间:2015-03-26 09:38:40

标签: python mysql

我的代码:

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行

显然代码有问题,但我不确定发生了什么。我哪里出错了?

3 个答案:

答案 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本身有关。