mysql - Python MySQLdb upload UnicodeEncodeError -
i have problem can upload csv files mysql, happens , encoding error. can 1 please review code , tell wrong? i'm new enconding.
the following snippet how write csv files uploaded, data extracted mdb file using mdn tools (mdb-export):
tableindex = 1 tname in tablenames: filename = os.path.join(csvpath, os.path.basename(mdb).split('.')[0] + '_' + tname + '.csv') try: p = subprocess.popen(["mdb-export", "-h", mdb, tname], stdout=subprocess.pipe, stderr=subprocess.pipe) tablecontent, error = p.communicate() if(p.returncode != 0): _logger.error('[%3d] export subprocess %d %s' % (tid, p.returncode, tablecontent)) sendmdberror(tid, mdb, _logger, 'alert: export subprocess') return(['', false]) if(error): _logger.error('[%3d] export communicate %d %s' % (tid, p.returncode, error.strip())) sendmdberror(tid, mdb, _logger, 'alert: export communicate') return(['', false]) except exception ex: _logger.exception('[%3d] export error' % tid) sendmdberror(tid, mdb, _logger, 'alert: export exception') return(['', false]) except: _logger.exception('[%3d] export unexpected' % tid) sendmdberror(tid, mdb, _logger, 'alert: export unexpected') return(['', false]) # if no data, no need corresponding sql if(len(tablecontent) == 0): emptytables.append(tname) # if data exists, dump data else: # add 'drivetest' data upload tablecontent = tablecontent.split('\n') tablecontent = [dt + ',' + line line in tablecontent if(line)] tablecontent = '\n'.join(tablecontent) try: open(filename, 'wb') f: f.write(tablecontent) if(_verbosity): _logger.debug('[%3d] %3d - write csv size[%8d] file: %s' %(tid, tableindex, len(tablecontent.split('\n')), filename)) tableindex += 1 except ioerror err: _logger.exception('[%3d] write ioerror: %s' % (tid, str(err))) sendmdberror(tid, mdb, _logger, 'alert: write ioerror') return(['', false]) except exception ex: _logger.exception('[%3d] write exception' % tid) sendmdberror(tid, mdb, _logger, 'alert: write exception') return(['', false]) except: _logger.exception('[%3d] write unexpected: %s' % tid) sendmdberror(tid, mdb, _logger, 'alert: write unexpected') return(['', false])
the following upload csv file, , here error:
# upload data tableindex = 0 table in tableddl: try: warnings.catch_warnings(record=true) war: _logger.info('[%3d] %3d going up... %s' %(tid, tableindex+1, os.path.basename(mdb).split('.')[0] + '_' + table)) _sqllock[tableindex].acquire() #self.cursor.execute(tableddl[table]) self.cursor.execute(tableuld[table]) self.conn.commit() _sqllock[tableindex].release() if(war): #if(_verbosity): print('[%3d] %3d warnings[%3d] %s' % (tid, tableindex+1, len(war), os.path.basename(mdb).split('.')[0] + '_' + table)) _logger.warning('[%3d] %3d warnings[%3d] %s' % (tid, tableindex+1, len(war), os.path.basename(mdb).split('.')[0] + '_' + table)) w in war: _logger.warning('[%3d] %s' % (tid, w.message)) #if(_verbosity): print('[%3d] %3d uploaded %s' % (tid, tableindex+1, os.path.basename(mdb).split('.')[0] + '_' + table)) _logger.info('[%3d] %3d uploaded %s' % (tid, tableindex+1, os.path.basename(mdb).split('.')[0] + '_' + table)) tableindex += 1 # remove uploaded csv file try: os.remove(csvfiles[table]+'.csv') _logger.info('[%3d] removed cvs file: %s' % (tid, csvfiles[table]+'.csv')) except oserror: pass except (mysqldb.internalerror, mysqldb.notsupportederror) err: _logger.error('[%3d] %3d internal: %s %s' % (tid, tableindex+1, err, sys.exc_info()[0])) self.conn.rollback() self.disconnect(tid, _logger, _verbosity, _debug) return(false) except mysqldb.operationalerror err: _logger.error('[%3d] %3d operationalerror: %s' % (tid, tableindex+1, sys.exc_info()[0])) _logger.error(err) self.conn.rollback() self.disconnect(tid, _logger, _verbosity, _debug) return(false) except mysqldb.programmingerror err: _logger.error('[%3d] %3d programmingerror: %s' % (tid, tableindex+1, sys.exc_info()[0])) _logger.error(err) self.conn.rollback() self.disconnect(tid, _logger, _verbosity, _debug) return(false) except mysqldb.error err: _logger.error('[%3d] %3d query: %s %s' % (tid, tableindex+1, err, sys.exc_info()[0])) self.conn.rollback() self.disconnect(tid, _logger, _verbosity, _debug) return(false) except exception err: _logger.error('[%3d] %3d exception: %s %s' % (tid, tableindex+1, err, sys.exc_info()[0])) #self.conn.rollback() #self.disconnect(tid, _logger, _verbosity, _debug) #return(false) pass except: _logger.error('[%3d] %3d other: %s' % (tid, tableindex+1, sys.exc_info()[0])) self.conn.rollback() self.disconnect(tid, _logger, _verbosity, _debug) return(false)
the error following:
2015-06-13 19:42:21,743 __main__ - error - [ 1] 1 exception: 'ascii' codec can't encode character u'\xb4' in position 40: ordinal not in range(128) <type 'exceptions.unicodeencodeerror'> 2015-06-13 19:42:30,962 __main__ - error - [ 1] 1 exception: 'ascii' codec can't encode character u'\xb4' in position 27: ordinal not in range(128) <type 'exceptions.unicodeencodeerror'>
i noticed given data gets uploaded, not sure if rows uploaded.
thanks!
try before putting csv db s.decode('utf-8')
, after getting out of db s.encode('utf-8')
i did sqlite , worked ok.
Comments
Post a Comment