<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">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 class="msg-3234098741214079493">





<div lang="NO-BOK" style="overflow-wrap: break-word;">
<div class="m_3246385033464972966WordSection1">
<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>