You are doing it right and 1 is the status code (SUCCESS).
Below is a complete (working) example of *queryByShape* implemented in Java mapscript (for a vector layer).

Translating the sample into python should be a piece of cake, but I'm not sure how it works with raster layers.

    /**
     * query a single layer by specifying a shape (in map coordinates).
     *
     * @param i              the layer to quer
     * @param s the shape whithin which results must be found
     * @return the query results
     */
    protected List queryLayerByShape(int i, shapeObj s) {
        List results = new ArrayList();

        layerObj layer = map.getLayer(i);
        if (layer != null && isVisible(layer)) {
            if (log.isDebugEnabled()) {
                log.debug("Querying (by shape) layer: " + layer.getName());
            }
            if (layer.queryByShape(map, s) == mapscript.MS_SUCCESS) {
                if (layer.open() == mapscript.MS_SUCCESS) {
                    for (int j = 0; j < layer.getNumResults(); j++) {
                        if (log.isDebugEnabled())
                            log.debug("Layer " + layer.getName() + ", result number:" + j);
                        resultCacheMemberObj resultMember = layer.getResult(j);
                        shapeObj shape = new shapeObj(layer.getType());
                        layer.getShape(shape, resultMember.getTileindex(), resultMember.getShapeindex());
                        if (shape != null) {
                            Map aResult = getResult(shape, layer);

                            results.add(aResult);
                        } else {
                            log.error("Shape " + j + " is null!");
                        }
                    }
		    // not necessary since 5.6
                    //layer.close();
                } else {
                    log.error("Cannot open layer: " + layer.getName());
                }
            } else {
                log.info("Query by shape on layer " + layer.getName() + " failed.");
            }
        }
        return results;
    }

    public shapeObj getSelectionShape(MapRequest request) {
        shapeObj s=new shapeObj(mapscript.MS_SHAPE_POLYGON);
        double x,y;

        String[] coords=request.getSelectionCoordinates().split(";");
        lineObj l=new lineObj();
        for ( int i=0; i<coords.length; i++ ) {
            String[] pair=coords[i].split(",");
            x=XToMapCoordinates(map.getWidth(), map.getExtent(), Double.parseDouble(pair[0]));
            y=YToMapCoordinates(map.getHeight(), map.getExtent(), Double.parseDouble(pair[1]));

            l.add(new pointObj(x, y, 0));
        }
        s.add(l);

        if (log.isTraceEnabled()) {
            log.trace("QueryByShape selectionCoords="+request.getSelectionCoordinates());
        }

        return s;
    }