diff options
Diffstat (limited to 'src/interfaces/python/pg.py')
-rw-r--r-- | src/interfaces/python/pg.py | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/interfaces/python/pg.py b/src/interfaces/python/pg.py index 64022d23494..a3644dd4514 100644 --- a/src/interfaces/python/pg.py +++ b/src/interfaces/python/pg.py @@ -25,7 +25,7 @@ def _quote(d, t): return "'f'" if d == "": return "null" - return "'%s'" % string.strip(re.sub('\'', '\'\'', "%s" % d)) + return "'%s'" % string.strip(re.sub("'", "''", "%s" % d)) class DB: """This class wraps the pg connection type""" @@ -175,16 +175,30 @@ class DB: # reload the dictionary to catch things modified by engine # note that get() changes 'oid' below to oid_table - return self.get(cl, a, 'oid') + # if no read perms (it can and does happen) return None + try: return self.get(cl, a, 'oid') + except: return None - # update always works on the oid which get returns + # Update always works on the oid which get returns if available + # otherwise use the primary key. Fail if neither. def update(self, cl, a): - q = "SELECT oid FROM %s WHERE oid = %s" % (cl, a['oid_%s' % cl]) + foid = 'oid_%s' % cl + pk = self.pkeys[cl] + if a.has_key(foid): + where = "oid = %s" % a[foid] + elif a.has_key(pk): + where = "%s = '%s'" % (pk, a[pk]) + else: + raise error, "Update needs key (%s) or oid as %s" % (pk, foid) + + q = "SELECT oid FROM %s WHERE %s" % (cl, where) if self.debug != None: print self.debug % q res = self.db.query(q).getresult() + if len(res) < 1: - raise error, "No record in %s where oid = %s (%s)" % \ - (cl, a['oid_%s' % cl], sys.exc_value) + raise error, "No record in %s where %s (%s)" % \ + (cl, where, sys.exc_value) + else: a[foid] = res[0][0] v = [] k = 0 @@ -199,7 +213,7 @@ class DB: try: q = "UPDATE %s SET %s WHERE oid = %s" % \ - (cl, string.join(v, ','), a['oid_%s' % cl]) + (cl, string.join(v, ','), a[foid]) if self.debug != None: print self.debug % q self.db.query(q) except: |