[Qgis-user] [QGIS-Developer] Pyqgis how to append existing gpkg layer

Germán Carrillo carrillo.german at gmail.com
Wed Apr 19 08:15:41 PDT 2023


Bonjour Sylvain,

J'espère que vous allez bien.


If you want to append features from a source layer to another layer that
already exists in a GPKG file, you can do this:

-----------------------------------------------------------------------------------------------------
options = QgsVectorFileWriter.SaveVectorOptions()
options.driverName = "GPKG"
options.layerName = "my_existing_layer_name"  *# Write here the existing
layer name in the GPKG*
options.actionOnExistingFile = QgsVectorFileWriter.AppendToLayerNoNewFields
options.onlySelectedFeatures = True

path = "/tmp/existing_gpkg_file_path.gpkg"
layer = QgsVectorLayer("/tmp/my_source_layer.shp", "my source layer name",
"ogr")

result = QgsVectorFileWriter.writeAsVectorFormatV3(
    layer,
    path,  *# Existing GPKG file path*
    layer.transformContext(),
    options)
-----------------------------------------------------------------------------------------------------


If on the contrary, you want to append a whole layer (with its own field
structure, crs, etc.) to an existing GPKG database, you can follow this
solution:

https://gis.stackexchange.com/a/417950


As you can see, the key is to define the options.actionOnExistingFile
property, whose possible values are well documented here:

https://api.qgis.org/api/3.28/classQgsVectorFileWriter.html#afda86eff21ac1da7dc42cbdde424acb1


*Note: SInce we're using writeAsVectorFormatV3(), you need at least QGIS
v3.20 for this solution to work.*


Regards,

Germán



El mié, 19 abr 2023 a las 3:55, PIERRE Sylvain via QGIS-Developer (<
qgis-developer at lists.osgeo.org>) escribió:

> Hi dev and users
>
>
>
> I don’t understand how to append an existing gpkg layer with pyqgis.
>
> I’ve tried many QgsVectorFileWriter options
>
>
>
> self.options.actionOnExistingFile =
> QgsVectorFileWriter.CreateOrOverwriteLayer
>
>
>
> reset final layer
>
>
>
> And
>
> self.options.EditionCapability =
> QgsVectorFileWriter.CanAppendToExistingLayer
>
>
>
> does not change anything
>
>
>
> So what’s the good way to do this ?
>
>
>
> This is my code (I’m iterating over several other data sources)
>
>         self.options = QgsVectorFileWriter.SaveVectorOptions()
>
>         self.options.driverName = 'GPKG'
>
>         self.options.onlySelectedFeatures = True
>
>         self.options.layerName = 'parcelles'
>
>
>
>         for dir in dirs:
>
>             print(dir)
>
>
>
>             if os.path.isdir(dir):
>
>                 db_GPKG = os.path.join(dir, 'MAEC2023.gpkg')
>
>                 if os.path.exists(db_GPKG):
>
>                     gpkg_layer = db_GPKG + "|layername=parcelles"
>
>                     RPG_layer = QgsVectorLayer(gpkg_layer, "RPG", "ogr")
>
>
>
>                     expr = (' "fk_mesure" is not null ')
>
>                     *#expr = ('"fk_mesure" = \'{}\'').format('MAEC
> Papillons')*
>
>
>
>                     RPG_layer.selectByExpression(expr)
>
>                     selected_feature = RPG_layer.selectedFeatures()
>
>                     print(len(selected_feature))
>
>                     if os.path.exists(self.db_GPKG): *# if the ouput file
> already exist*
>
>                         self.options.actionOnExistingFile =
> QgsVectorFileWriter.CreateOrOverwriteLayer
>
>                         *#self.options.actionOnExistingFile =
> QgsVectorFileWriter.AppendToLayerNoNewFields*
>
>                         *#self.options.actionOnExistingFile =
> QgsVectorFileWriter.AppendToLayerAddFields *
>
>                         self.options.EditionCapability =
> QgsVectorFileWriter.CanAppendToExistingLayer
>
>                     else:
>
>                         self.options.actionOnExistingFile =
> QgsVectorFileWriter.CreateOrOverwriteFile
>
>
>
>                     write_result, error_message =
> QgsVectorFileWriter.writeAsVectorFormatV2(RPG_layer, self.db_GPKG , self.
> context, self.options)
>
>
>
>
>
>
>
> Thanks
>
>
>
>
>
> Sylvain PIERRE
>
> Chef de projet système d’information
>
> Direction des Systèmes d’Information et du Développement Numérique
>
> Service Projets et Ingénierie Numérique
>
> *Collectivité européenne d’Alsace*
>
> Tél : 03 88 76 68 88
>
> sylvain.pierre at alsace.eu
>
> www.alsace.eu
>
> [image: facebook] <http://www.facebook.com/toutelalsace> [image: twitter]
> <http://www.twitter.com/toutelalsace> [image: insta]
> <http://www.instagram.com/toutelalsace>
>
>
> _______________________________________________
> 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
>


-- 
-----------
   |\__
(:>__)(
   |/
Soluciones Geoinformáticas Libres
http://geotux.tuxfamily.org/
https://twitter.com/GeoTux2 <http://twitter.com/GeoTux2>

<http://gis.stackexchange.com/users/4972/germ%c3%a1n-carrillo>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-user/attachments/20230419/3a30f75b/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image001.jpg
Type: image/jpeg
Size: 8094 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/qgis-user/attachments/20230419/3a30f75b/attachment-0001.jpg>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image002.png
Type: image/png
Size: 827 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/qgis-user/attachments/20230419/3a30f75b/attachment-0003.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image003.png
Type: image/png
Size: 852 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/qgis-user/attachments/20230419/3a30f75b/attachment-0004.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image004.png
Type: image/png
Size: 1028 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/qgis-user/attachments/20230419/3a30f75b/attachment-0005.png>


More information about the QGIS-User mailing list