--- ZSQLExtend/importFMPXML.py 2007/01/09 18:28:23 1.6 +++ 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 @@ -43,6 +44,9 @@ def SimpleSearch(curs,query, args=None): 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: @@ -91,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) @@ -137,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() @@ -160,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 @@ -230,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 @@ -241,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) @@ -252,7 +262,16 @@ 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, self.rowcnt)) @@ -293,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