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]

http://dive4elements.wald.intevation.org