--- ZSQLExtend/importFMPXML.py 2007/01/09 14:00:59 1.5 +++ ZSQLExtend/importFMPXML.py 2007/02/20 16:00:03 1.7 @@ -4,6 +4,7 @@ import string import logging import sys +import types from xml import sax from amara import saxtools @@ -41,6 +42,11 @@ def SimpleSearch(curs,query, args=None): logging.debug("executing: "+query) if psyco == 1: 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) logging.debug("sql done") try: @@ -89,7 +95,8 @@ class xml_handler: self.dbIDs = {} self.rowcnt = 0 - + + self.db.execute("set datestyle to 'german'") if id_field is not None: # prepare a list of ids for sync mode qstr="select %s from %s"%(id_field,table) @@ -135,10 +142,14 @@ class xml_handler: # adjust db table to fields in XML and fieldlist for fieldName in self.fieldNames: - logging.debug("db-fieldname:"+repr(fieldName)) - if (fieldName not in columns) and (fieldName in self.update_fields): + logging.debug("db-fieldname:"+repr(fieldName)) + 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') logging.info("db add field:"+qstr) + + if type(qstr)==types.UnicodeType: + qstr=qstr.encode('utf-8') self.db.execute(qstr) self.dbCon.commit() @@ -158,6 +169,7 @@ class xml_handler: name = self.params.get((None, u'NAME')) yield None #Element closed. Wrap up + name=name.replace(" ","_")# make sure no spaces self.fieldNames.append(name) logging.debug("FIELD name: "+name) return @@ -187,12 +199,13 @@ class xml_handler: if self.sync_mode: # delete unmatched entries in db + delQuery = "DELETE FROM %s WHERE %s = %%s"%(self.table,self.id_field) for id in self.dbIDs.keys(): # find all not-updated fields if self.dbIDs[id] == 0: logging.info(" delete:"+id) - qstr = "DELETE FROM %s WHERE %%s = '%%s'"%self.table - SimpleSearch(self.db, qstr, (self.id_field,id)) + SimpleSearch(self.db, delQuery, [id]) + sys.exit(1) elif self.dbIDs[id] > 1: logging.info(" sync:"+"id used more than once?"+id) @@ -227,7 +240,7 @@ class xml_handler: id_val='' # synchronize by 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: self.dbIDs[id_val] += 1 update=True @@ -238,9 +251,9 @@ class xml_handler: #for fieldName in self.update_fields: # setvals.append("%s = %s"%(fieldName,sql_quote(self.dataSet[fieldName]))) #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) - 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) SimpleSearch(self.db, self.updQuery, args) logging.debug("update: %s"%id_val) @@ -249,9 +262,18 @@ class xml_handler: #fields=string.join(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) - 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) - 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)) if (self.rowcnt % 10) == 0: @@ -290,7 +312,7 @@ class xml_handler: yield None #Element closed. Wrap up field = self.fieldNames[self.colIdx] - self.dataSet[field] = content + self.dataSet[field.lower()] = content #print " DATA(", field, ") ", repr(content) return