Mercurial > dive4elements > river
changeset 5036:d6860fca89e4 dami
Pull information about the backend into dgm.
While the api of cx_oracle and psycopg2 is compatible enough,
the query syntax is not :(
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Wed, 20 Feb 2013 10:40:07 +0100 |
parents | 1f33012cc02a |
children | 2837b11cdb13 |
files | flys-backend/contrib/shpimporter/dgm.py flys-backend/contrib/shpimporter/shpimporter.py flys-backend/contrib/shpimporter/utils.py |
diffstat | 3 files changed, 26 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/flys-backend/contrib/shpimporter/dgm.py Wed Feb 20 10:38:17 2013 +0100 +++ b/flys-backend/contrib/shpimporter/dgm.py Wed Feb 20 10:40:07 2013 +0100 @@ -26,8 +26,10 @@ 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, %s)" +SQL_INSERT_DGT_ORA = "INSERT INTO dem (river_id, " + ", ".join(DGM_MAP.keys()) + \ + ") VALUES (:s, :s, :s, :s, :s, :s, :s, :s, :s, :s, :s, :s, :s)" -def insertRiverDgm(dbconn, dgmfile, river_name, dry_run): +def insertRiverDgm(dbconn, dgmfile, river_name, dry_run, oracle): with codecs.open(dgmfile, "r", "latin1") as csvfile: firstline = csvfile.readline() names = firstline.split(";") @@ -37,7 +39,7 @@ namedict[name] = field_nr field_nr += 1 - river_id = utils.getRiverId(dbconn, river_name) + river_id = utils.getRiverId(dbconn, river_name, oracle) for line in csvfile: fields = line.split(";") if not fields: continue @@ -52,7 +54,12 @@ values.append(unicode.encode( fields[namedict[val]], "UTF-8")) cur = dbconn.cursor() - cur.execute(SQL_INSERT_DGT, [river_id] + values) + if oracle: + stmt = SQL_INSERT_DGT_ORA + else: + stmt = SQL_INSERT_DGT + + cur.execute(stmt, [river_id] + values) if not dry_run: dbconn.commit()
--- a/flys-backend/contrib/shpimporter/shpimporter.py Wed Feb 20 10:38:17 2013 +0100 +++ b/flys-backend/contrib/shpimporter/shpimporter.py Wed Feb 20 10:40:07 2013 +0100 @@ -145,7 +145,9 @@ else: connstr = 'OCI:%s/%s@%s' % (config.user, config.password, config.host) + oracle = False # Marker if oracle is used. if 'OCI:' in connstr: + oracle = True try: import cx_Oracle as dbapi raw_connstr=connstr.replace("OCI:", "") @@ -154,6 +156,7 @@ "Neccessary to connect to a Oracle Database.\n" "Please refer to the installation " "documentation." % sys.path) + return -1 else: # Currently only support for oracle and postgres try: @@ -164,6 +167,7 @@ "Neccessary to connect to a Posgresql Database.\n" "Please refer to the installation " "documentation." % sys.path) + return -1 dbconn_raw = dbapi.connect(raw_connstr) dbconn = ogr.Open(connstr) @@ -189,7 +193,7 @@ os.path.basename(os.path.normpath(directory))) else: river_name = config.river_name - river_id = utils.getRiverId(dbconn_raw, river_name) + river_id = utils.getRiverId(dbconn_raw, river_name, oracle) if not river_id: logger.info("Could not find river in database. Skipping: %s" @@ -229,7 +233,8 @@ "Skipping DGM import." % dgmfilename) else: logger.info("Inserting DGM meta information in 'dem' table.") - insertRiverDgm(dbconn_raw, dgmfilename, river_name, config.dry_run) + insertRiverDgm(dbconn_raw, dgmfilename, river_name, + config.dry_run, oracle) else: logger.info("Skip import of DGM.")
--- a/flys-backend/contrib/shpimporter/utils.py Wed Feb 20 10:38:17 2013 +0100 +++ b/flys-backend/contrib/shpimporter/utils.py Wed Feb 20 10:40:07 2013 +0100 @@ -11,6 +11,7 @@ SHP='.shp' SQL_SELECT_RIVER_ID="SELECT id FROM rivers WHERE name = %s" +SQL_SELECT_RIVER_ID_ORA="SELECT id FROM rivers WHERE name = :s" def findShapefiles(path): shapes = [] @@ -28,13 +29,19 @@ return shapes -def getRiverId(dbconn, name): +def getRiverId(dbconn, name, oracle): """ Returns the id of the river "name" Dbconn must be a python database connection api compliant object """ cur = dbconn.cursor() - cur.execute(SQL_SELECT_RIVER_ID, (name,)) + if oracle: + # This is stupid and shoudl not be neccessary. But I don't + # know how to make it work both ways. aheinecke - 02/2013 + stmt = SQL_SELECT_RIVER_ID_ORA + else: + stmt = SQL_SELECT_RIVER_ID + cur.execute(stmt, (name,)) row = cur.fetchone() if row: return row[0]