Это действительно проблема стиля параметров. Вы должны использовать? вместо% s.
Вот как вы воспроизводите полученную ошибку:
shell> jython
>>> from com.ziclix.python.sql import zxJDBC
>>> (d, v) = "jdbc:mysql://localhost/test", "org.gjt.mm.mysql.Driver"
>>> cnx = zxJDBC.connect(d, None, None, v)
>>> cur = cnx.cursor()
>>> cur.execute("SELECT %s", ('ham',))
..
zxJDBC.Error: error setting index [1] [SQLCode: 0]
Parameter index out of range (1 > number of parameters,
which is 0). [SQLCode: 0], [SQLState: S1009]
Теперь, если вы используете кавычки вокруг знака?, Вы получите ту же проблему:
>>> cur.execute("SELECT '?'", ('ham',))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
zxJDBC.Error: error setting index [1] [SQLCode: 0]
Parameter index out of range (1 > number of parameters,
which is 0). [SQLCode: 0], [SQLState: S1009]
Смысл в том, чтобы не использовать кавычки и позволить интерфейсу базы данных сделать это за вас:
>>> cur.execute("SELECT ?", ('ham',))
>>> cur.fetchall()
[(u'ham',)]
Вот как я бы это сделал в коде. Сначала вы создаете строки, которые собираетесь использовать для функций str_to_date (), например:
start = "%d,%d,%d,%d,%d" % (int(tempStart.month),
int(tempStart.day), int(tempStart.year),int(tempStart.hour),
int(tempStart.minute))
stop = "%d,%d,%d,%d,%d" % (int(tempEnd.month),
int(tempEnd.day), int(tempEnd.year), int(tempEnd.hour),
int(tempEnd.minute))
Вы делаете оператор SELECT, но не используете кавычки и передаете его курсору. Интерфейс базы данных сделает всю работу за вас. Также в качестве параметра мы указываем значение гранулярности.
select = """SELECT value FROM table_name
WHERE value_till_dt >= str_to_date(?, '%%m,%%d,%%Y,%%H,%%i')
AND value_till_dt <= str_to_date(?, '%%m,%%d,%%Y,%%H,%%i')
AND granularity=?
ORDER BY value_till_dt
"""
cursor.execute(select, (start,stop,5))
Надеюсь, это поможет!