使用cx_Oracle选择带有重音名称的列

时间:2018-07-20 09:52:46

标签: sql python-3.x oracle cx-oracle

我有一个与迪迪娜·迪恩(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',...编码,但未成功。

如果您想知道的话,我不是那个给列名加上重音的想法的好主意...

1 个答案:

答案 0 :(得分:0)

处理此问题的最简单方法是在创建连接时指定编码,如下所示:

conn = cx_Oracle.connect(oracle_user, oracle_password, dsn, encoding="UTF-8")

我刚刚创建了一个表,该表具有与您指定的相同的列名,并且具有如上所述的指定编码,它工作正常。如果没有,您将看到错误。