7

I would like to use QGIS Field Calculator in Python to update the existing column based on certain conditions?

How can I do this?

  • I think this answer might help. – lrssvt Dec 3 '14 at 13:46
  • I agreed, you don't need the Field Calculator with PyQGIS, everything can be done in Python (look at Using Vector Layers) – gene Dec 3 '14 at 19:16
5

There is no prebuilt class to do the magic the field 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() 

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() 
  • I am testing this code, but I get an error on the expression.prepareFields(layer.pendingFields()) line? QgsExpression' object has no attribute 'prepareFields' – kflaw Mar 9 '15 at 18:44
  • please use 'prepare' instead of 'prepareFields' – Pugazh Apr 7 '15 at 11:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.