Published on

python使用cx-oracle连接oracle

Authors
  • avatar
    Name
    Lif
    Twitter

今天尝试在flask使用orcale数据库,需要用cx-oracle

pip install cx-oracle

结果报错

the Oracle Client library version is unsupported

以为是cx-oracle版本的问题,下调cx-oracle到6.0

pip uninstall cx-oracle
pip install cx-oracle==6.0

提示

Oracle Client library is at version 0.0 but version 11.2 
or higher is needed

提示这个是因为python和oracle客户端版本不对应。查了下,原来venv中python是32位的,在oracle官网下了个最新的32位instanceclient,安装设置环境变量。再次运行

ORA-12705: Cannot access NLS data files or invalid 
environment specified

每次错误都不一样。 这个是因为NLSlanguage不同造成的。使用plsql查询NLS参数

SELECT USERENV ('language') FROM DUAL

得到 SIMPLIFIED CHINESE_CHINA.ZHS16GBK 然后在注册表

\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ORACLE

这里找到 NLS_LANG ,数值是NA改成上边的,再次运行。 得到想要的结果。最后是py文件的代码。

import cx_Oracle

connection = cx_Oracle.Connection("userid/password@host:port/service_name")
cursor = connection.cursor()

try:
    cursor.execute("select * from tablename")
except Exception as err:
    print("Whoops!")
    print(err)
# print(cursor.description)
for row in cursor.execute("select * from tablename"):
    print(row)