Gravando dados de um arquivo CSV no Oracle utlizando Python e a biblioteca cx_Oracle

Tive uma certa complicação ao inserir dados no Oracle vindo de um arquivo CSV.

O problema, é que o arquivo que vinha os dados tinha uma formatação diferente de UTF-8.
Sempre que tentava gravar a linha vinda do arquivo dava o erro:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position XX: ordinal not in range(128)

Como cada caso é um caso, pode ser que ao abrir o arquivo com formatação UTF-8, funcione. Mas nem sempre.
with open(csv_file, encoding='utf-8') as csv_file:
 csv_reader = csv.reader(csv_file, delimiter=';')

 for lines in csv_reader:
Porém meu caso foi mais específico. Não dava certo utilizando esse método. Após algum tempo pesquisando, descobri que era necessário abrir a conexão com o banco com as opções encoding nencoding habilitadas com UTF-8. Segue o código:
dsn_tns = cx_Oracle.makedsn(hostname, portnumber, service_name)
con = cx_Oracle.connect(user='user', password='123465', dsn=dsn_tns, encoding='UTF-8', nencoding='UTF-8')
curr = con.cursor()

with open(csv_file, encoding='utf-8') as csv_file:
 csv_reader = csv.reader(csv_file, delimiter=';')

 for lines in csv_reader:
  cur.execute("insert into tableX (column1, column2) values (:1, :2)", lines)
Com isso foi possível gravar a linha direta do arquivo CSV no banco de dados!

Comentários

Postagens mais visitadas deste blog

Utilizando um pool de conexões com hibernate

Popup em JSF sem Javascript