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

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -