[英]Selecting and manipulating multiple features using the QgsFeatureRequest().setFilterExpression() function in PyQGIS
我有一個帶有名為“type”的屬性字段的矢量圖層。 我正在嘗試刪除“類型”值不是“主要”的所有功能。 這是我的小腳本,感謝這里和這里的答案:
from qgis.core import *
with edit(layer):
request = QgsFeatureRequest().setFilterExpression("\"type\" != 'primary'")
request.setSubsetOfAttributes([])
request.setFlags(QgsFeatureRequest.NoGeometry)
selection = layer.getFeatures(request)
layer.deleteFeatures([f.id() for f in selection])
但是,當我運行它時,沒有任何反應。 我已經確定我使用了正確的圖層
>>>layer.id()
由於沒有錯誤,我假設我的過濾器表達式格式不正確。 可能是這種情況,還是我的腳本邏輯有問題? 我在 QGIS 3.4.12 上運行 Python 3.7.0。
您的過濾器表達式似乎工作正常。 但調用 deleteFeatures() 僅對通過調用 startEditing() 啟用編輯的圖層有效。 在進行 commitChanges() 調用之前,使用此方法對功能所做的更改不會提交給基礎數據提供程序。 任何未提交的更改都可以通過調用 rollBack() 來丟棄。
layer.startEditing()
layer.deleteFeatures([f.id() for f in selection])
layer.commitChanges()
請參考文檔官方文檔
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.