Hi Germán, options.actionOnExistingFile = QgsVectorFileWriter.AppendToLayerNoNewFields
Was the key. Thanks ! [cid:image001.jpg@01D97369.4FF99FA0] 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<mailto:sylvain.pie...@alsace.eu> www.alsace.eu<http://www.alsace.eu> [facebook]<http://www.facebook.com/toutelalsace> [twitter] <http://www.twitter.com/toutelalsace> [insta] <http://www.instagram.com/toutelalsace> De : Germán Carrillo <carrillo.ger...@gmail.com> Envoyé : mercredi 19 avril 2023 17:16 À : PIERRE Sylvain <sylvain.pie...@alsace.eu> Cc : qgis-user@lists.osgeo.org; qgis-develo...@lists.osgeo.org Objet : Re: [QGIS-Developer] Pyqgis how to append existing gpkg layer Soyez vigilant : ce courriel provient d'une organisation externe à la CeA. • Assurez-vous d’abord qu’il ne s’agit pas d’un email malveillant avant de cliquer sur tout lien ou pièce jointe. Apprendre à reconnaître un email de phishing.<https://intranet.alsace.eu/actualites/apprenez-a-reconnaitre-un-email-phishing/> 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-develo...@lists.osgeo.org<mailto:qgis-develo...@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 [cid:image005.jpg@01D97369.4FF99FA0] 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<mailto:sylvain.pie...@alsace.eu> www.alsace.eu<http://www.alsace.eu> [facebook]<http://www.facebook.com/toutelalsace> [twitter] <http://www.twitter.com/toutelalsace> [insta] <http://www.instagram.com/toutelalsace> _______________________________________________ QGIS-Developer mailing list qgis-develo...@lists.osgeo.org<mailto:qgis-develo...@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> [Image supprimée par l'expéditeur.]<http://gis.stackexchange.com/users/4972/germ%c3%a1n-carrillo>
_______________________________________________ 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