Eso es porque el método execute espera una lista de argumentos en su segundo parámetro, es decir [a] debe ser del tipo lista y puede ser uno o más parámetros que son sustituidos en la consulta donde aparezcan los símbolos de interrogación en el orden de aparición.
Exactamente igual que la función Subst() de gambas para BD.
El hecho de que te haya funcionado al existir el registro es porque la función retorna None en caso de éxito y en caso de error lanza una excepción que no has controlado con except:.
Espero que eso aclare tu duda.
Saludos
Saludos
Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'