[Qgis-developer] How to use QPyNullVariant() to "empty" primary key fields in spatialite layer

Alexandre Neto senhor.neto at gmail.com
Fri Aug 30 02:38:54 PDT 2013


In the multipartsplit plugin [1] I'm trying to solve the primary key (pk)
fields problem in postgis and spatialite like in it was done in the
splitFeatures() [2]

I have no problems with Postgis provider, but in spatialite setting pk
fields to NULL does not work as I expected, and spatialite does not choose
a new non used id by it self. (Making it impossible to commit the changes
without manually introduce some id)

In splitFeatures() [2] when a field is in
provider.pkAttributeIndexes<http://www.qgis.org/api/classQgsVectorDataProvider.html#a6e19d018aa0b88da21fdb9d02c5e8a60>(),
but has no default value, the filed is set to empty with this

newAttributes[ pkIdx ] = QVariant();


But i'm not being able to use it in my code, since it's says QVariant() can
not be instantiated. Actually this is said in here [3]. And it says that
Null QVariant() are now converted in QPyNullVariant

Can I use QPyNullVariant to keep the pk field empty, so that
spatialite automatically choose a adequate int value? How?

I tried the code bellow but it did not work.

# Get attributes from original feature
> new_attributes = feature.attributes()
>


> # When attribute is a Primary Key, replace by provider default value



> for j in provider.pkAttributeIndexes():
>     if provider.defaultValue(j):
>         new_attributes[j] = provider.defaultValue(j)
>     else:
>         new_attributes[j] = QPyNullVariant('int')



Thanks.

Alexandre Neto

[1] http://plugins.qgis.org/plugins/splitmultipart/
[2] http://www.qgis.org/api/qgsvectorlayereditutils_8cpp_source.html#l00247
[3]
http://hub.qgis.org/wiki/quantum-gis/Python_plugin_API_changes_from_18_to_20
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20130830/0d965fb7/attachment.html>


More information about the Qgis-developer mailing list