For reasons I won't go too deeply into, unless requested, I regularly need to run a very short PyQGIS query/filter code on 2 Spatialite layers:

query = '"id_a" IN (47, 120)'
canvas = qgis.utils.iface.mapCanvas()
allLayers = canvas.layers()
for layer in allLayers:
    if layer.name() == 'Layer_A':
        layer.setSubsetString(query)
    elif layer.name() == 'Layer_B':
        layer.setSubsetString(query)

Layer_A contains a geometry field, Layer_B does not.  Layer_B is a view, which honestly is very slow to process.  I have these joined in QGIS: Layer Properties -> Joins.  For performance reasons, I have "Cache join layer in virtual memory" selected, otherwise editing is *unbearably slow* to the point that QGIS completely locks up for long periods of time.

The issue then, is that after I run the code subsequent times (changing for new queries), I have to go back into Layer Properties -> Joins -> specific join, click OK (without need to change any settings) to refresh the cache.

Probably a long way to this, but...  Is there a way in PyQGIS to refresh the cache for the join layer and just add that line in at the end of the already existing code?

Thanks.

_______________________________________________
Qgis-user mailing list
Qgis-user@lists.osgeo.org
List info: https://lists.osgeo.org/mailman/listinfo/qgis-user
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user

Reply via email to