[QGIS-Developer] setDataSourceUri() not working

Julien Cabieces julien.cabieces at oslandia.com
Thu Dec 8 10:12:24 PST 2022


Hi,

dataSourceUri is used when creating the dataProvider/vectorlayer and 
there is no way to refresh the provider according to a new uri.

I don't see any other way than recreate a new QgsVectorLayer with the
new dataSource uri, add it to your project instance with addMapLayer and
remove the old one.

Maybe there is a trick to simplify things but I fail to see how.

Regards,
Julien


> Hi Devs,
>
> I'm trying to change the dataSourceUri of an existing layer, but can't 
> get it working. The reason is that my layer should be connected to 
> another view in the same database, because the db should do some 
> calculations for my plugin.
>
> I created a test script for a simple polygon layer in a gpkg, which I 
> attached to this email. The layer "polygons" and both views are all 
> working correctly if you just drag and drop the gpkg in QGIS.
>
> Open the polygons layer and select it. Then run:
>
>
> layer = iface.activeLayer()
> provider = layer.dataProvider()
>
> ds = provider.dataSourceUri()
> print(ds)
>
> fn = ds.split('|layername=')[0]
> new_ds = fn + '|layername=highest_3_view'
> print(new_ds)
>
> provider.setDataSourceUri(new_ds)
>
>
>
>
> The first run displays 2 different dataSourceUris:
> path/to/test_views.gpkg|layername=polygons
> path/to/test_views.gpkg|layername=highest_3_view
>
> The second run displays 2x the same dataSourceUris:
> path/to/test_views.gpkg|layername=polygons
> path/to/test_views.gpkg|layername=highest_3_view
>
> So the string has been changed. But my layer properties still point to 
> path/to/test_views.gpkg|layername=polygons
>
> and the features displayed are all 5 from the polygons layer. (The views 
> have only 3 features)
>
>
>
> Should i do something after setting the new provider? I've been trying 
> many things, including:
> * provider.reloadData()
> * layer.setDataProvider(dataprovider)
> * refreshing/redrawing the layer
>
>
> Hope anyone can help!
> Raymond_______________________________________________
> QGIS-Developer mailing list
> QGIS-Developer at lists.osgeo.org
> List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer



More information about the QGIS-Developer mailing list