Diff for /ZSQLExtend/importFMPXML.py between versions 1.5 and 1.7

version 1.5, 2007/01/09 14:00:59 version 1.7, 2007/02/20 16:00:03
Line 4 Line 4
 import string  import string
 import logging  import logging
 import sys  import sys
   import types
   
 from xml import sax  from xml import sax
 from amara import saxtools  from amara import saxtools
Line 41  def SimpleSearch(curs,query, args=None): Line 42  def SimpleSearch(curs,query, args=None):
     logging.debug("executing: "+query)      logging.debug("executing: "+query)
     if psyco == 1:      if psyco == 1:
         query = query.encode("UTF-8")          query = query.encode("UTF-8")
           #if args is not None:
           #    args = [ sql_quote(a) for a in args ]
       #logging.debug(query)
       #logging.debug(args)
   
     curs.execute(query, args)      curs.execute(query, args)
     logging.debug("sql done")      logging.debug("sql done")
     try:      try:
Line 90  class xml_handler: Line 96  class xml_handler:
         self.dbIDs = {}          self.dbIDs = {}
         self.rowcnt = 0          self.rowcnt = 0
                                   
           self.db.execute("set datestyle to 'german'")
         if id_field is not None:          if id_field is not None:
             # prepare a list of ids for sync mode              # prepare a list of ids for sync mode
             qstr="select %s from %s"%(id_field,table)              qstr="select %s from %s"%(id_field,table)
Line 136  class xml_handler: Line 143  class xml_handler:
         # adjust db table to fields in XML and fieldlist          # adjust db table to fields in XML and fieldlist
         for fieldName in self.fieldNames:          for fieldName in self.fieldNames:
             logging.debug("db-fieldname:"+repr(fieldName))                                   logging.debug("db-fieldname:"+repr(fieldName))                     
             if (fieldName not in columns) and (fieldName in self.update_fields):              fieldName=fieldName.replace(" ","_")   # repair _                  
               if (fieldName.lower() not in columns) and (fieldName in self.update_fields):
                 qstr="alter table %s add %s %s"%(self.table,fieldName,'text')                  qstr="alter table %s add %s %s"%(self.table,fieldName,'text')
                 logging.info("db add field:"+qstr)                  logging.info("db add field:"+qstr)
                   
                   if type(qstr)==types.UnicodeType:
                       qstr=qstr.encode('utf-8')
                 self.db.execute(qstr)                  self.db.execute(qstr)
                 self.dbCon.commit()                  self.dbCon.commit()
   
Line 158  class xml_handler: Line 169  class xml_handler:
         name = self.params.get((None, u'NAME'))          name = self.params.get((None, u'NAME'))
         yield None          yield None
         #Element closed.  Wrap up          #Element closed.  Wrap up
           name=name.replace(" ","_")# make sure no spaces
         self.fieldNames.append(name)          self.fieldNames.append(name)
         logging.debug("FIELD name: "+name)          logging.debug("FIELD name: "+name)
         return          return
Line 187  class xml_handler: Line 199  class xml_handler:
                   
         if self.sync_mode:          if self.sync_mode:
             # delete unmatched entries in db              # delete unmatched entries in db
               delQuery = "DELETE FROM %s WHERE %s = %%s"%(self.table,self.id_field)
             for id in self.dbIDs.keys():              for id in self.dbIDs.keys():
                 # find all not-updated fields                  # find all not-updated fields
                 if self.dbIDs[id] == 0:                  if self.dbIDs[id] == 0:
                     logging.info(" delete:"+id)                      logging.info(" delete:"+id)
                     qstr = "DELETE FROM %s WHERE %%s = '%%s'"%self.table                      SimpleSearch(self.db, delQuery, [id])
                     SimpleSearch(self.db, qstr, (self.id_field,id))                      sys.exit(1)
                                           
                 elif self.dbIDs[id] > 1:                  elif self.dbIDs[id] > 1:
                     logging.info(" sync:"+"id used more than once?"+id)                      logging.info(" sync:"+"id used more than once?"+id)
Line 227  class xml_handler: Line 240  class xml_handler:
         id_val=''          id_val=''
         # synchronize by id_field          # synchronize by id_field
         if self.id_field:          if self.id_field:
             id_val=self.dataSet[self.id_field]              id_val=self.dataSet[self.id_field.lower()]
             if id_val in self.dbIDs:              if id_val in self.dbIDs:
                 self.dbIDs[id_val] += 1                  self.dbIDs[id_val] += 1
                 update=True                  update=True
Line 238  class xml_handler: Line 251  class xml_handler:
             #for fieldName in self.update_fields:              #for fieldName in self.update_fields:
             #    setvals.append("%s = %s"%(fieldName,sql_quote(self.dataSet[fieldName])))              #    setvals.append("%s = %s"%(fieldName,sql_quote(self.dataSet[fieldName])))
             #setStr=string.join(setvals, ',')              #setStr=string.join(setvals, ',')
             id_val=self.dataSet[self.id_field]              id_val=self.dataSet[self.id_field.lower()]
             #qstr="UPDATE %s SET %s WHERE %s = '%s' "%(self.table,setStr,self.id_field,id_val)              #qstr="UPDATE %s SET %s WHERE %s = '%s' "%(self.table,setStr,self.id_field,id_val)
             args = [self.dataSet[f] for f in self.update_fields]              args = [self.dataSet[f.lower()] for f in self.update_fields]
             args.append(id_val)              args.append(id_val)
             SimpleSearch(self.db, self.updQuery, args)              SimpleSearch(self.db, self.updQuery, args)
             logging.debug("update: %s"%id_val)              logging.debug("update: %s"%id_val)
Line 249  class xml_handler: Line 262  class xml_handler:
             #fields=string.join(update_fields, ',')              #fields=string.join(update_fields, ',')
             #values=string.join([" %s "%sql_quote(self.dataSet[x]) for x in self.update_fields], ',')              #values=string.join([" %s "%sql_quote(self.dataSet[x]) for x in self.update_fields], ',')
             #qstr="INSERT INTO %s (%s) VALUES (%s)"%(self.table,fields,self.values)              #qstr="INSERT INTO %s (%s) VALUES (%s)"%(self.table,fields,self.values)
             args = [self.dataSet[f] for f in self.update_fields]              args=[]
               for f in self.update_fields:
                   value=self.dataSet[f.lower()].encode('utf-8') 
                   if value=="": #hack DW
                       value=None
                       
                   args.append(value)
                   
               #args = [self.dataSet[f.lower()].encode('utf-8') for f in self.update_fields]
               logging.debug(args)
             SimpleSearch(self.db, self.addQuery, args)              SimpleSearch(self.db, self.addQuery, args)
             logging.debug("add: %s"%self.dataSet.get(self.id_field, rowcnt))              logging.debug("add: %s"%self.dataSet.get(self.id_field, self.rowcnt))
   
         #logging.info(" row:"+"%d (%s)"%(self.rowcnt,id_val))          #logging.info(" row:"+"%d (%s)"%(self.rowcnt,id_val))
         if (self.rowcnt % 10) == 0:          if (self.rowcnt % 10) == 0:
Line 290  class xml_handler: Line 312  class xml_handler:
             yield None              yield None
         #Element closed.  Wrap up          #Element closed.  Wrap up
         field = self.fieldNames[self.colIdx]          field = self.fieldNames[self.colIdx]
         self.dataSet[field] = content          self.dataSet[field.lower()] = content
         #print "  DATA(", field, ") ", repr(content)          #print "  DATA(", field, ") ", repr(content)
         return          return
   

Removed from v.1.5  
changed lines
  Added in v.1.7


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>