[gdal-dev] Updating a single PostgreSQL field from ogr/python

Luca Sigfrido Percich sigfrido at tiscali.it
Mon May 14 06:07:44 EDT 2012


Martin,

you're updating existing features so you don't want to use the
CreateFeature method. If you try to re-insert an existing feature you
will get the duplicate pk error.

See the docs for the SetFeature method.

Moreover, your loop code is a bit confused; usually you would do:

while True:
    outFeature = dstLayer.GetNextFeature()
    if (outFeature is None):
        break
    outFeature.SetField('gradient',666)
    outLayer.SetFeature(outFeature)

You may also use an SQL UPDATE instruction:

dataSource.ExecuteSQL("update gwr.dstlayer set gradient = 666")

Sig

Il giorno sab, 12/05/2012 alle 19.43 +0200, Martin Jensen ha scritto:
> Hi list,
> 
> 
> I was trying to do the following with ogr python bindings
>      1. Create  srclayer from PostGIS based on sql statement
>      2. Copy srclayer to dstlayer (also PostGIS)
>      3. Add new field to dstlayer
>      4. assign value to new field


> outFeature = dstlayer.GetNextFeature()
> 
> ## update the new field 
> 
> for feature in dstlayer:
> 
>     outFeature.SetField('gradient',666) ##set this field only
> 
>     outFeature.SetFID(-1) ## tried to unset ogc_fid so not violating
> pk column constraint
> 
>     dstlayer.CreateFeature(outFeature)
> 
>     outFeature = dstlayer.GetNextFeature()
> 
> 
> 
> 
> 
> 
> I get the error:
> 
> 
> ERROR:  duplicate key value violates unique constraint "dstlayer_pk"
> DETAIL:  Key (ogc_fid)=(1) already exists.
> 
> 
> 
> 
> I have a feeling i'm missing something really simple here.
> 
> 
> Any suggestions would be much appreciated!
> 
> 
> Software:
> GDAL 1.9
> PG: PostgreSQL version string : 'PostgreSQL 9.1.3 on
> x86_64-apple-darwin11.3.0, compiled by
> i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc.
> build 5658) (LLVM build 2336.9.00), 64-bit'
> PG: PostGIS version string : '2.0 USE_GEOS=1 USE_PROJ=1 USE_STATS=1'
> 
> 
> Best regards
> 
> 
> Martin 
> _______________________________________________
> gdal-dev mailing list
> gdal-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/gdal-dev


_____________
PRIVACY
Le informazioni contenute in questo messaggio sono riservate e confidenziali. Il loro utilizzo e' consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora Lei non fosse la persona a cui il presente messaggio è destinato, La invitiamo ad eliminarlo dal Suo Sistema e a distruggere le varie copie o stampe, dandone gentilmente comunicazione all’indirizzo mail del mittente. Ogni utilizzo improprio e' contrario ai principi del D.lgs 196/03 e alla legislazione europea (Direttiva 2002/58/CE).

PRIVACY
Le informazioni contenute in questo messaggio sono riservate e confidenziali. Il loro utilizzo e' consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora Lei non fosse la persona a cui il presente messaggio è destinato, La invitiamo ad eliminarlo dal Suo Sistema e a distruggere le varie copie o stampe, dandone gentilmente comunicazione all’indirizzo mail del mittente. Ogni utilizzo improprio e' contrario ai principi del D.lgs 196/03 e alla legislazione europea (Direttiva 2002/58/CE).


More information about the gdal-dev mailing list