There is no prebuilt class to do the magic the field calculatorField Calculator does (I am planning on adding it at some stage) however it's quite simple:
expression = QgsExpression("1 + 1")
# This allows field lookup
index = layer.fieldNameIndex("UpdateField")
expression.prepare(layer.pendingFields())
layer.startEditing()
for feature in layer.getFeatures():
value = expression.evaluate(feature)
layer.changeAttributeValue(feature.id(), index, value)
layer.commitChanges()
expression = QgsExpression("1 + 1")
# This allows field lookup
index = layer.fieldNameIndex("UpdateField")
expression.prepare(layer.pendingFields())
layer.startEditing()
for feature in layer.getFeatures():
value = expression.evaluate(feature)
layer.changeAttributeValue(feature.id(), index, value)
layer.commitChanges()
A couple of notes: We are using changeAttributeValue
because it's faster but does require use to use the feature id and field index, another way which might be as fast but is clearer to read is:
expression = QgsExpression("1 + 1")
# This allows field lookup
expression.prepare(layer.pendingFields())
layer.startEditing()
for feature in layer.getFeatures():
value = expression.evaluate(feature)
feature["UpdateField"] = value
layer.updateFeature(feature)
layer.commitChanges()
expression = QgsExpression("1 + 1")
# This allows field lookup
expression.prepare(layer.pendingFields())
layer.startEditing()
for feature in layer.getFeatures():
value = expression.evaluate(feature)
feature["UpdateField"] = value
layer.updateFeature(feature)
layer.commitChanges()