我有一个与迪迪娜·迪恩(Didina Deen)一年多以前(Handling accents in Oracle from Python)相似的问题。我需要从Oracle表中获取信息,列名称包含重音。该表有很多列,因此我想在查询中进行过滤。现在,我必须执行“选择*”并选择+100列,以通过指定其位置仅获取我需要的列。
import cx_Oracle
my_query = "SELECT descripción_oferta FROM big_table WHERE IDENTIFICADOR = 'XXXXXX'"
dsn = cx_Oracle.makedsn(oracle_host, oracle_port, service_name=oracle_servicename)
con = cx_Oracle.connect(oracle_user, oracle_password, dsn)
cur.execute(my_query)
UnicodeEncodeError: 'ascii' codec can't encode character '\xf3' in position 180: ordinal not in range(128)
我可以肯定地访问该表,我可以选择没有重音符号的其他列,因此必须是这个。我尝试使用'utf-8','latin1',...编码,但未成功。
如果您想知道的话,我不是那个给列名加上重音的想法的好主意...
答案 0 :(得分:0)
处理此问题的最简单方法是在创建连接时指定编码,如下所示:
conn = cx_Oracle.connect(oracle_user, oracle_password, dsn, encoding="UTF-8")
我刚刚创建了一个表,该表具有与您指定的相同的列名,并且具有如上所述的指定编码,它工作正常。如果没有,您将看到错误。