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@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.pie...@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@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>
_______________________________________________
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

Reply via email to