[QGIS-Developer] Create plain table (without geometry) in gpkg?

Raymond Nijssen r.nijssen at terglobo.nl
Tue Jun 23 12:16:33 PDT 2020


Thanks Even, that is it. So easy!

And then you can create features without geometry and add them.

Here's my little test script for those who are looking for the same:

vl = QgsVectorLayer('NoGeometry', 'test', 'memory')
pr = vl.dataProvider()
pr.addAttributes([QgsField("txt", QVariant.String)])
pr.addAttributes([QgsField("num", QVariant.Int)])
vl.updateFields()
QgsProject.instance().addMapLayer(vl)

feat = QgsFeature()
feat.setAttributes(['hi', 3])
pr.addFeatures([feat])


Regards,
Raymond




On 23-06-2020 15:51, Even Rouault wrote:
> On mardi 23 juin 2020 15:34:58 CEST Raymond Nijssen wrote:
> 
>  > My python plugin should create a table without geometry in a gpkg to
> 
>  > store some additional (meta) info about the layers. I could use python
> 
>  > bindings for sqlite of course, but the plugin users might not have that
> 
>  > installed.
> 
>  >
> 
>  > What are the options from within qgis? Is python-sqlite available, or
> 
>  > can I run sql queries in antother way? Or can I create a table similar
> 
>  > to creating a new maplayer?
> 
>  >
> 
>  > My (ugly) solution would be creating a point layer and use that
> 
>  > attribute table and storing POINT(0 0) as geometries.
> 
>  > Or even worse, creating a .csv sidecar file for my gpkg.
> 
>  >
> 
>  > Hope anyone here knows a better solution!
> 
> Raymond,
> 
> You should be able to just use the normal QGIS vector API for that. For 
> example QgsVectorFileWriter.create() with geometryType = NoGeometry
> 
> Even
> 
> -- 
> 
> Spatialys - Geospatial professional services
> 
> http://www.spatialys.com
> 


More information about the QGIS-Developer mailing list