2

Does anyone know the correct syntax for the selectbyexpression processing algorithm for selecting MTFCC's? This is what I have right now, but it doesn't work so I'm guessing my problem lies in the syntax for the "expression" variable.

layer = qgis.utils.iface.activeLayer() expression = '"MTFCC" = "H3010"' processing.runalg("qgis:selectbyexpression", layer, expression, 0) 

When I select by expression using the GUI, it shows something like "MTFCC" + "H3010" and gives me an output preview of 'S1400H3010' and I don't understand. Anything else I try just gives me an "expression invalid" error.

I am using pyQGIS v2.14.0

2
  • try expression = QgsExpression(" \"MTFCC\" = \"H3010\" ") Commented Jul 11, 2016 at 6:58
  • that gives me a "Problem executing algorithm: syntax error, unexpected LT" error in a small window Commented Jul 11, 2016 at 17:48

1 Answer 1

1

Here it is. Changes to your code are provided below, followed by an explanation.

layer = qgis.utils.iface.activeLayer() expression = "/"MTFCC/" = /"H3010 /" " # note that I've modified this line processing.runalg("qgis:selectbyexpression", layer, expression, 0) 

Using processing.alghelp("qgis:selectbyexpression") I have seen that the function uses QString and not an Expression as a parameter. Thus there was no need to use QgsExpression as I've suggested before. Nevertheless, your syntax was wrong, since you misused ".

In general when you build a python string you will use "..." to define the places a string starts and ends. Similarly, you can involve both strings and variables to build a more complex expression, e.g. "This string involves a" + variable + ", right?".

In your case you wanted an expression that calls a field, which in SQL looks like that: "FieldName1" = "FieldName2". Python however reads two strings instead of one expression. The common slash (/) is used as an "exit" sign, and it indicates that the symbol that follows is a part of a string, and not a python function. Using / " causes the interpreter to ignore any commands / activities related to this specific ". Finally it leads to this python expression: " /"FieldName1/" = "/FieldName2/" ".

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.