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:
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 e 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