<div dir="ltr"><div dir="ltr">Hi all, <div><br></div><div>that's right Andrea. It actually depends on whether you want to append features to an existing layer, or to "append" (one could also say "create") a layer (in)to an existing GPKG database. The latter case is well covered by Anne's answer.</div><div><br></div><div>See prior messages in this thread: <a href="https://lists.osgeo.org/pipermail/qgis-user/2023-April/052855.html">https://lists.osgeo.org/pipermail/qgis-user/2023-April/052855.html</a></div><div><br></div><div>Regards, </div><div><br></div><div>Germán</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">El mié, 26 abr 2023 a las 9:11, andrea antonello via QGIS-User (<<a href="mailto:qgis-user@lists.osgeo.org">qgis-user@lists.osgeo.org</a>>) escribió:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">Hi, from what I saw in the docs, you should be able to append to layers with the filewriter option AppendToLayerNoNewFields?</div><div>The <span style="font-family:"Courier New"">CreateOrOverwriteLayer</span> overwrites the layer completely. </div><div dir="ltr"><br></div><div>Cheers,</div><div>Andrea</div><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Apr 26, 2023 at 2:58 PM Anne B. Nilsen via QGIS-User <<a href="mailto:qgis-user@lists.osgeo.org" target="_blank">qgis-user@lists.osgeo.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>





<div lang="NO-BOK">
<div>
<p class="MsoNormal"><span lang="EN-GB">I’m not a pyQGIS-expert, but with help from <a href="http://gis.stackechange.com" target="_blank">gis.stackechange.com</a> I have managed to create an empty geopackage file and then adding several layers to it with this code:<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">…<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">gpkg_reg = "karplanteregistrering.gpkg"                   # the NEW gpkg to be created<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">if os.path.exists(gpkg_reg):                              # If gpkg-file already exists, delete it<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">    os.remove(gpkg_reg)<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">…<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New""># <a href="https://gis.stackexchange.com/questions/417916/creating-empty-layers-in-a-geopackage-using-pyqgis?noredirect=1&lq=1" target="_blank">
https://gis.stackexchange.com/questions/417916/creating-empty-layers-in-a-geopackage-using-pyqgis?noredirect=1&lq=1</a><u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">def create_blank_gpkg_layer(gpkg_path: str, layer_name: str, geometry: int,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">                            crs: str, fields: QgsFields, append: bool = False<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">                            ) -> bool:<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">    # To add a layer to an existing GPKG file, pass 'append' as True<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">    options = QgsVectorFileWriter.SaveVectorOptions()<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">    options.driverName = "GPKG"<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">    options.layerName = layer_name<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">    if append:<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">        options.actionOnExistingFile = QgsVectorFileWriter.CreateOrOverwriteLayer<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">        writer = QgsVectorFileWriter.create(<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">        gpkg_path,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">        fields,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">        geometry,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">        QgsCoordinateReferenceSystem(crs),<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">        QgsCoordinateTransformContext(),<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">        options)<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">    del writer<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">    return True<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">…<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New""># Layer 1 oversikt – creating an empty layer with attributes read from a csv-file<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">f = open("./egenskaper/egenskaper_oversikt.csv",'r') # open file<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">f.readline()  # read the first line of the file (the "metadata"/heading)<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">layer_name = "oversikt"              # set layer name<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">print('creates layer', layer_name)   # print layer name<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">geom = QgsWkbTypes.PointZ            # geometrytype<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">crs = 'epsg:25832'                   # coordinate system<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">fields = QgsFields()<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">for line in f:                       # Read attrubutes from csv-file<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">     </span>
<span style="font-family:"Courier New"">r = {}<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">     r = line.split(';')  # 0 navn, 1 QVariant-type, 2 lengde og 3 presisjon<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">     </span><span lang="EN-GB" style="font-family:"Courier New"">fname = r[0]<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">     l = int(r[2])<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">     p = int(r[3])<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">     try:<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">          fields.append(QgsField(fname,set_variant(r[1]),'',l,p))  # add field to layer
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">     </span>
<span style="font-family:"Courier New"">except:<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">          print("Noe gikk galt - får ikke laget egenskaper fra " +str(f))<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">f.close()  # close file<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">create_blank_gpkg_layer(gpkg_reg, layer_name, geom, crs, fields)  # Do NOT include True when the FIRST layer is created<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New""><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New""># Layer 2 arter (to be added to the same new gpkg-file just created above)<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">f = open("./egenskaper/egenskaper_arter.csv",'r') # open file<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">f.readline()<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">layer_name = "arter"
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">print('creates layer', layer_name)   # print layer name<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">geom = QgsWkbTypes.PointZ            # geometrytype<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">crs = 'epsg:25832'                   # coordinate system<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">fields = QgsFields()<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">for line in f:                       # Read attrubutes from csv-file<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">     </span>
<span style="font-family:"Courier New"">r = {}<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">     r = line.split(';')  # 0 navn, 1 QVariant-type, 2 lengde og 3 presisjon<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">     </span><span lang="EN-GB" style="font-family:"Courier New"">fname = r[0]<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">     l = int(r[2])<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">     p = int(r[3])<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">     try:<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">          fields.append(QgsField(fname,set_variant(r[1]),'',l,p))  # add field to layer
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">     </span>
<span style="font-family:"Courier New"">except:<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">          print("Noe gikk galt - får ikke laget egenskaper fra " +str(f))<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">f.close()  # close file<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-family:"Courier New"">create_blank_gpkg_layer(gpkg_reg, layer_name, geom, crs, fields, True)  # Include True to add a new layer to the SAME gpkg-file<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">…<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">Note the difference in the use of True and not when calling create_blank_gpk_layer().<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">Perhaps something similar may be the solution to your problem.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">Kind regards<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">Anne<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
</div>
</div>

_______________________________________________<br>
QGIS-User mailing list<br>
<a href="mailto:QGIS-User@lists.osgeo.org" target="_blank">QGIS-User@lists.osgeo.org</a><br>
List info: <a href="https://lists.osgeo.org/mailman/listinfo/qgis-user" rel="noreferrer" target="_blank">https://lists.osgeo.org/mailman/listinfo/qgis-user</a><br>
Unsubscribe: <a href="https://lists.osgeo.org/mailman/listinfo/qgis-user" rel="noreferrer" target="_blank">https://lists.osgeo.org/mailman/listinfo/qgis-user</a><br>
</div></blockquote></div></div>
_______________________________________________<br>
QGIS-User mailing list<br>
<a href="mailto:QGIS-User@lists.osgeo.org" target="_blank">QGIS-User@lists.osgeo.org</a><br>
List info: <a href="https://lists.osgeo.org/mailman/listinfo/qgis-user" rel="noreferrer" target="_blank">https://lists.osgeo.org/mailman/listinfo/qgis-user</a><br>
Unsubscribe: <a href="https://lists.osgeo.org/mailman/listinfo/qgis-user" rel="noreferrer" target="_blank">https://lists.osgeo.org/mailman/listinfo/qgis-user</a><br>
</blockquote></div><br clear="all"><div><br></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>-----------<br></div><div>   |\__  <br>(:>__)(<br>   |/    <br>Soluciones Geoinformáticas Libres                            <br><a href="http://geotux.tuxfamily.org/" target="_blank">http://geotux.tuxfamily.org/</a><br><a href="http://twitter.com/GeoTux2" target="_blank">https://twitter.com/GeoTux2</a></div><div><br></div><div><div><a href="http://gis.stackexchange.com/users/4972/germ%c3%a1n-carrillo" target="_blank"><img src="http://gis.stackexchange.com/users/flair/4972.png"></a></div></div></div></div></div></div></div></div>