Acabas de caer en una de las cosas más molestas y difíciles de ver en Python: Si pones un solo valor en una tupla (por ejemplo:
(2)), la tupla no se crea.
Es decir,
(2) no es una tupla de un elemento, sino simplemente el entero
2.
Para forzar a que la tupla se cree, se debe escribir como
(2,), con la coma antes del
), como si fueses a escribir un segundo valor.
Cambia
por
y recordá siempre escribir la coma cuando quieras crear una tupla de un solo elemento.
La raíz del error está en la sustitución de
%s, ya que internamente se intenta acceder al primer elemento de la tupla de valores. Como no le estás dando una tupla sino un entero, intenta hacer algo como
2[0] lo cual es claramente erróneo.
Saludos.