0

苦苦挣扎了几个小时,在互联网上搜索无济于事。我尝试了 stackoverflow 的每一个建议(使用 '%%',将 '(val)' 之前的 ',' 更改为 '%',将 '%s' 用 "'" 括起来等)但没有任何乐趣(请参阅下面的错误消息) .

代码:

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)

类型错误:&:“str”和“str”不支持的操作数类型

4

1 回答 1

0

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

在这种情况下,您必须%通过将它们更改为 ,来转义任何应该发送到 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))

......应该做的伎俩。

于 2013-05-05T09:49:06.600 回答