带有变量的Python MySQLdb查询和“time_format(time,'%H:%i')”

时间:2013-05-05 09:37:52

标签: python mysql-python

经过几个小时的努力并且在互联网上搜索无济于事。我尝试了stackoverflow中的每一个建议(使用'%%',将',''更改为'''''''''''''''''''''''''''''''''''''''''''''''''''''''

代码:

timeList = ['09:31', '09:32', '09:33', '09:34', '09:35']
for z, val in enumerate(timeList):
   selectToday = dbConnect.cursor()
   selectToday.execute('''SELECT sec_code, date, time, price_nom, price_change_percent, vol \
        FROM tab_metrics \
        WHERE date = '2013-04-30' \
        AND time_format(time, '%H:%i') = %s \
        AND price_nom > 1 \
        ORDER BY sec_code''', (val))

可能是因为查询中有'%H:%i'(我需要忽略数据库中的秒数)吗?如果是这样,我该如何解决这个问题?谢谢你的帮助。

我在尝试时遇到的各种错误:

  

ValueError:索引213处不支持的格式字符“H”(0x48)

     

TypeError:&:'str'和'str'不支持的操作数类型

1 个答案:

答案 0 :(得分:0)

如果没有完整的回溯,我无法确定,但我怀疑MySQLdb正在查询字符串上使用sprintf()样式字符串插值来插入必要的参数。

在这种情况下,你必须通过将%更改为%%来转义应该发送到MySQL的任何timeList = ['09:31', '09:32', '09:33', '09:34', '09:35'] for z, val in enumerate(timeList): selectToday = dbConnect.cursor() selectToday.execute("""SELECT sec_code, date, time, price_nom, price_change_percent, vol \ FROM tab_metrics \ WHERE date = '2013-04-30' \ AND time_format(time, '%%H:%%i') = %s \ AND price_nom > 1 \ ORDER BY sec_code""", (val)) 个字符,所以......

{{1}}

......应该这样做。