Ответы:
Следуй этим шагам:
Получить ссылку на слой:
cLayer = iface.mapCanvas().currentLayer()
Получить featureIterator из выражения:
expr = QgsExpression( "\"ogc_fid\"=482" )
it = cLayer.getFeatures( QgsFeatureRequest( expr ) )
Составьте список идентификаторов функций из результата, полученного в 2 .:
ids = [i.id() for i in it]
Выберите функции с идентификаторами, полученными в 3 .:
cLayer.setSelectedFeatures( ids )
ПРИМЕЧАНИЕ. Если вы хотите установить выражение со строковым значением, вам необходимо добавить кавычки к такому значению следующим образом:
expr = QgsExpression( " \"name\" = 'my string' " )
Если ваше строковое значение происходит из переменной, вы можете сделать это:
myVariable = 'my string'
expr = QgsExpression( " \"name\" = '{}' ".format(myVariable) )
"\"ogc_fid\"=482 AND \"name\"='hello world'"
. Кстати, ссылка, которую вы включили в свой комментарий, на самом деле утверждает, что статический атрибут BinaryOperatorText
недоступен в привязках Python, но операторы работают QgsExpression
, даже если они используются через привязки Python.
expr = QgsExpression("\"police_ref\" = 'P0580996'")
. Я попытался добавить символ прерывания к поисковому запросу (для одинарных кавычек), но это не имеет значения. Интересно, что если я открою таблицу атрибутов, к которой я обращаюсь, и использую там построитель выражений, он делает выбор, если в качестве первой строки используется Police_ref, который я использую в качестве примера, но не иначе
Это сработало для меня на консоли QGIS Python
layer = qgis.utils.iface.activeLayer()
layer .selectByExpression(" \"ogc_fid\" = '{}' ".format(482))
Вам нужно только проверить это в интерфейсе GUI: «Выбрать по выражению». Если это работает, вы можете вставить его в код Python, заключив его в двойные кавычки "".
exp = QgsExpression("ogc_fid=482")
Если вы сравниваете со строкой, вы можете добавить одинарную кавычку ''.
exp = QgsExpression("ogc_fid='482'")
Это тот же принцип в Python, он может иметь значение между двойной кавычкой и одинарной кавычкой.
"\"ogc_fid\"=482 AND name=\"hello world\""
? Здесь говорится, что это недоступно в python: qgis.org/api/… . Может быть, вы знаете способ обойти это ограничение?