Mercurial > dive4elements > river
view flys-backend/contrib/shpimporter/dgm.py @ 4976:a6ee62a070b0 dami
I'm learning how to use cursors \o/
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Wed, 13 Feb 2013 17:49:30 +0100 |
parents | 9eea3cd22ee7 |
children | 71e1b96f4794 |
line wrap: on
line source
# -*- coding: utf-8 -*- import codecs import utils def latin(string): return unicode(string, "latin1") # <dbfield> : (<csvfield>, conversion function) DGM_MAP = { "name" : latin("Gewässer"), "lower" : ("km_von", lambda x: int(x)), "upper" : ("km_bis", lambda x: int(x)), "year_from" : "Jahr_von", "year_to" : "Jahr_bis", "projection" : "Projektion", "elevation_state" : latin("Höhenstatus"), "format" : "Format", "border_break" : ("Bruchkanten", lambda x: True if x.lower() == "Ja" else False), "resolution" : (latin("Auflösung"), lambda x: x), # "description" : # : "SRID", "path" : ("Pfad_Bestand", lambda x: x), } SQL_INSERT_DGT = "INSERT INTO dem (river_id, " + ", ".join(DGM_MAP.keys()) + \ ") VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)" def insertRiverDgm(dbconn, dgmfile, river_name, dry_run): with codecs.open(dgmfile, "r", "latin1") as csvfile: firstline = csvfile.readline() names = firstline.split(";") namedict = {} field_nr = 0 for name in names: namedict[name] = field_nr field_nr += 1 river_id = utils.getRiverId(dbconn, river_name) for line in csvfile: fields = line.split(";") if not fields: continue if fields[namedict[latin("Gewässer")]] != river_name: continue else: values=[] for key, val in DGM_MAP.items(): if isinstance(val, tuple): values.append(val[1](fields[namedict[val[0]]])) else: values.append(unicode.encode( fields[namedict[val]], "UTF-8")) cur = dbconn.cursor() cur.execute(SQL_INSERT_DGT, [river_id] + values) if not dry_run: dbconn.commit()