¿Cómo obtener características por sus atributos (similar a Iqueryfilter en arcobjects) en Qgis usando python? En lugar de obtener todas las funciones y filtrarlas manualmente, ¿hay alguna opción para usar la cláusula where para filtrarla?
Ejemplo: Tengo un nombre de campo llamado 'Condados'. Tiene más de cincuenta mil funciones. No es posible obtener todas las funciones y filtrarlas debido a que lleva mucho tiempo. Entonces puedo consultarlo usando iqueryfilter.whereclause = 'Counties = Norwich' en arcobjects. Algo similar que necesito en PyQgis.
Respuestas:
El motor de expresión QGIS puede hacer esto usando el
QgsFeatureRequest.setFilterExpression( unicode )
método (desde QGIS 2.2)Comenzando con 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 postgisEn este momento (2.16), mucho más que solo el proveedor de postgis implementa esto (spaceialite, ogr, oracle ...).>
,=
,IN
,NOT NULL
... son compatibles)Con QGIS 3.0 es incluso posible simplemente hacer
fuente
Esta publicación , que podría considerarse una respuesta a una pregunta duplicada, detalla cómo obtener todos los atributos de una capa. El autor describe el proceso que está buscando como filtrar los datos manualmente una vez que se devuelven. Es una referencia bastante completa y su enlace realmente debería ayudarte.
fuente
Mediante el uso de una consulta SQL también es posible con facilidad
ogr
. Puede ejecutar este código, por ejemplo, en la consola de Python QGIS o en un script independiente.Ejemplo :
fuente
La especificación de filtros SQL aún no es compatible con QGIS API a partir de la versión 1.9.
Según tengo entendido por este artículo de la lista de correo , el soporte para el "SQL del proveedor nativo" solo estará en una versión futura.
fuente