El motor de expresión de QGIS puede hacer esto usando el método QgsFeatureRequest.setFilterExpression( unicode )
(Desde QGIS 2.2)
request = QgsFeatureRequest().setFilterExpression( u'"Counties" = \'Norwich\'' )
it = l.getFeatures( request )
A partir de QGIS 2.10, incluso es posible que el filtrado de esa manera le brinde un rendimiento adicional sobre otros tipos de filtrado (como las implementaciones de python).
Básicamente, esto se aplica si se cumplen las siguientes tres condiciones:
-
Está utilizando una capa con el proveedor de postgis En este momento (2.16), mucho más que el proveedor de postgis implementa esto (spatialite, ogr, oracle ...).
- Su expresión no es demasiado complicada (se admiten cosas como
>
, =
, IN
, NOT NULL
...
- Has habilitado esta función en Configuración > Opciones > Fuentes de datos > Manejo de fuente de datos > Ejecutar expresión en el lado del servidor postgres
- El beneficio de rendimiento es óptimo con índices apropiados en las tablas de base de datos
Con QGIS 3.0, incluso es posible hacerlo simplemente
features = l.getFeatures('"Counties" = \'Norwicth\'')