Re: [QGIS-Developer] setDataSourceUri() not working
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@lists.osgeo.org > List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer > Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer ___ QGIS-Developer mailing list QGIS-Developer@lists.osgeo.org List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Re: [QGIS-Developer] setDataSourceUri() not working
*Raymond Nijssen* /Wed Dec 7 07:39:50 PST 2022/ I'm trying to change the dataSourceUri of an existing layer Hi Raymond, AFAIK you need to use setDataSource [1] directly on the layer an not setDataSourceUri on the data provider. E.g.: layer.setDataSource(new_ds, layer_name, 'ogr') Best regards. Andrea [1] https://qgis.org/pyqgis/master/core/QgsMapLayer.html#qgis.core.QgsMapLayer.setDataSource___ QGIS-Developer mailing list QGIS-Developer@lists.osgeo.org List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Re: [QGIS-Developer] setDataSourceUri() not working
Thanks Andrea, but that doesn't seem to exist: AttributeError: 'QgsVectorLayer' object has no attribute 'setDataSourceUri' Raymond On 08-12-2022 19:42, Andrea Giudiceandrea via QGIS-Developer wrote: *Raymond Nijssen* /Wed Dec 7 07:39:50 PST 2022/ I'm trying to change the dataSourceUri of an existing layer Hi Raymond, AFAIK you need to use setDataSource [1] directly on the layer an not setDataSourceUri on the data provider. E.g.: layer.setDataSource(new_ds, layer_name, 'ogr') Best regards. Andrea [1] https://qgis.org/pyqgis/master/core/QgsMapLayer.html#qgis.core.QgsMapLayer.setDataSource ___ QGIS-Developer mailing list QGIS-Developer@lists.osgeo.org List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer ___ QGIS-Developer mailing list QGIS-Developer@lists.osgeo.org List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Re: [QGIS-Developer] setDataSourceUri() not working
Hi Raymond, I wrote setDataSource, not setDataSourceUri. Regards. Andrea Il 09/12/2022 08:19, Raymond Nijssen via QGIS-Developer ha scritto: Thanks Andrea, but that doesn't seem to exist: AttributeError: 'QgsVectorLayer' object has no attribute 'setDataSourceUri' Raymond On 08-12-2022 19:42, Andrea Giudiceandrea via QGIS-Developer wrote: *Raymond Nijssen* /Wed Dec 7 07:39:50 PST 2022/ I'm trying to change the dataSourceUri of an existing layer Hi Raymond, AFAIK you need to use setDataSource [1] directly on the layer an not setDataSourceUri on the data provider. E.g.: layer.setDataSource(new_ds, layer_name, 'ogr') Best regards. Andrea [1] https://qgis.org/pyqgis/master/core/QgsMapLayer.html#qgis.core.QgsMapLayer.setDataSource ___ QGIS-Developer mailing list QGIS-Developer@lists.osgeo.org List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Re: [QGIS-Developer] setDataSourceUri() not working
That works!! :O Thank you so much!!! Raymond On 09-12-2022 08:20, Andrea Giudiceandrea via QGIS-Developer wrote: Hi Raymond, I wrote setDataSource, not setDataSourceUri. Regards. Andrea Il 09/12/2022 08:19, Raymond Nijssen via QGIS-Developer ha scritto: Thanks Andrea, but that doesn't seem to exist: AttributeError: 'QgsVectorLayer' object has no attribute 'setDataSourceUri' Raymond On 08-12-2022 19:42, Andrea Giudiceandrea via QGIS-Developer wrote: *Raymond Nijssen* /Wed Dec 7 07:39:50 PST 2022/ I'm trying to change the dataSourceUri of an existing layer Hi Raymond, AFAIK you need to use setDataSource [1] directly on the layer an not setDataSourceUri on the data provider. E.g.: layer.setDataSource(new_ds, layer_name, 'ogr') Best regards. Andrea [1] https://qgis.org/pyqgis/master/core/QgsMapLayer.html#qgis.core.QgsMapLayer.setDataSource ___ QGIS-Developer mailing list QGIS-Developer@lists.osgeo.org List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer ___ QGIS-Developer mailing list QGIS-Developer@lists.osgeo.org List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer