Respuestas:
Sigue estos pasos:
Obtenga la referencia de capa:
cLayer = iface.mapCanvas().currentLayer()
Obtenga un FeatureIterator de una expresión:
expr = QgsExpression( "\"ogc_fid\"=482" )
it = cLayer.getFeatures( QgsFeatureRequest( expr ) )
Cree una lista de ID de características a partir del resultado obtenido en 2 .:
ids = [i.id() for i in it]
Seleccione características con los ID obtenidos en 3 .:
cLayer.setSelectedFeatures( ids )
NOTA: Si desea establecer una expresión con un valor de cadena , debe agregar comillas a dicho valor, de esta manera:
expr = QgsExpression( " \"name\" = 'my string' " )
Si su valor de cadena proviene de una variable, puede hacer esto:
myVariable = 'my string'
expr = QgsExpression( " \"name\" = '{}' ".format(myVariable) )
"\"ogc_fid\"=482 AND \"name\"='hello world'"
. Por cierto, el enlace que incluiste en tu comentario en realidad indica que el atributo estático BinaryOperatorText
no está disponible en los enlaces de Python, pero los operadores sí funcionan QgsExpression
, incluso si se usan a través de enlaces de Python.
expr = QgsExpression("\"police_ref\" = 'P0580996'")
. Intenté agregar un carácter de ruptura al término de búsqueda (para las comillas simples) pero no hace la diferencia. Curiosamente, si abro la tabla de atributos que estoy consultando y uso el generador de expresiones allí, hace una selección si police_ref que uso como ejemplo está en la primera fila, pero no de otra manera
Esto funcionó para mí en la consola QGIS Python
layer = qgis.utils.iface.activeLayer()
layer .selectByExpression(" \"ogc_fid\" = '{}' ".format(482))
Solo necesita probarlo en la interfaz GUI: "Seleccionar por expresión". Si funciona, puede pegarlo en su código de Python rodeado de comillas dobles "".
exp = QgsExpression("ogc_fid=482")
Si compara con una cadena, puede agregar comillas simples ''.
exp = QgsExpression("ogc_fid='482'")
Es el mismo principio en Python, puede marcar la diferencia entre comillas dobles y comillas simples.
"\"ogc_fid\"=482 AND name=\"hello world\""
? Aquí dice que esto no está disponible en python: qgis.org/api/… . ¿Quizás conoces una forma de sortear esta limitación?