Respostas:
Siga esses passos:
Obtenha a referência da camada:
cLayer = iface.mapCanvas().currentLayer()
Obtenha um featureIterator a partir de uma expressão:
expr = QgsExpression( "\"ogc_fid\"=482" )
it = cLayer.getFeatures( QgsFeatureRequest( expr ) )
Crie uma lista de IDs de recursos a partir do resultado obtido em 2 .:
ids = [i.id() for i in it]
Selecione os recursos com os IDs obtidos em 3 .:
cLayer.setSelectedFeatures( ids )
NOTA: Se você deseja definir uma expressão com um valor de sequência , é necessário adicionar aspas a esse valor, desta maneira:
expr = QgsExpression( " \"name\" = 'my string' " )
Se o seu valor de sequência vier de uma variável, você pode fazer isso:
myVariable = 'my string'
expr = QgsExpression( " \"name\" = '{}' ".format(myVariable) )
"\"ogc_fid\"=482 AND \"name\"='hello world'"
. BTW, o link que você incluiu no seu comentário está realmente afirmando que o atributo estático BinaryOperatorText
não está disponível nas ligações do Python, mas os operadores trabalham para isso QgsExpression
, mesmo que sejam usados através das ligações do Python.
expr = QgsExpression("\"police_ref\" = 'P0580996'")
. Tentei adicionar um caractere de quebra ao termo de pesquisa (para aspas simples), mas isso não faz diferença. Curiosamente, se eu abrir a tabela de atributos Eu estou consultando, e usar a expressão construtor lá, ele faz uma seleção se o police_ref eu uso como um exemplo é na primeira fila, mas sem qualquer outro
Isso funcionou para mim no QGIS Python Console
layer = qgis.utils.iface.activeLayer()
layer .selectByExpression(" \"ogc_fid\" = '{}' ".format(482))
Você só precisa testá-lo na interface da GUI: "Selecionar por expressão". Se funcionar, você pode colá-lo no seu código Python entre aspas duplas "".
exp = QgsExpression("ogc_fid=482")
Se você comparar com uma string, poderá adicionar aspas simples ''.
exp = QgsExpression("ogc_fid='482'")
É o mesmo princípio em python, ele pode fazer a diferença entre aspas duplas e aspas simples.
"\"ogc_fid\"=482 AND name=\"hello world\""
? Aqui diz que isso não está disponível em python: qgis.org/api/… . Talvez você saiba uma maneira de contornar essa limitação?