Python cx_Oracle问题处理

Posted 爱在夕阳下

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python cx_Oracle问题处理相关的知识,希望对你有一定的参考价值。

今天第一次使用Python连接Oracle数据库(多么可怕,三年码农没用Python手动连过Oracle)

 

首先:

pip install cx_Oracle

  好,安装完成,测试代码如下:

from sqlalchemy import create_engine  

db_engine = create_engine(\'oracle://xynsx:whjyg_xynsx@10.128.85.8:1521/xyora\') 
conn=db_engine.connect()
result=conn.execute(\'SELECT * FROM PJ_CZP\')
conn.close()

for item in result:
	print(\'item------------->\', item)

  好,从这开始,悲剧了

sqlalchemy.exc.DatabaseError: (cx_Oracle.DatabaseError) DPI-1047: 32-bit Oracle Client library cannot be loaded: 
"The specified module could not be found". See https://oracle.github.io/odpi/doc/installation.html#windows for help
(Background on this error at: http://sqlalche.me/e/4xp6)


  报错了,简单看是因为我用的是32位的Oracle Client 包,它找不到了。立马从Navicat Premium安装路径中找到instantclient_11_2,在其目录下找到三个dll文件:

oci.dll,oraocci11.dll,oraociei11.dll,拷贝到Python目录下的:Lib\\site-packages目录下

再次测试,再次悲剧,提示不能加载正常,好吧,我的Navicat Premium是64位的,重新下载一个instantclient_11_2的32位版本,然后三个dll文件重新拷贝。

成功,数据取到了,但是。。。。。

 

 各种问好是什么鬼?

 

 

 查看发现Oracle默认编码格式为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

找到原因,就要改正了。

修改代码如下:

 

# coding:utf-8

import os

from sqlalchemy import create_engine  

os.environ[\'NLS_LANG\'] = \'SIMPLIFIED CHINESE_CHINA.UTF8\'
db_engine = create_engine(\'oracle://xynsx:whjyg_xynsx@10.128.85.8:1521/xyora\') 


conn=db_engine.connect()
result=conn.execute(\'SELECT * FROM PJ_CZP\')
conn.close()
print(\'res===============>\', result)
for item in result:
	print(\'item------------->\', item)

  好了,完全木有问题了!

以上是关于Python cx_Oracle问题处理的主要内容,如果未能解决你的问题,请参考以下文章

如何在python多进程代码中使用cx_Oracle创建一个连接(或会话)池来连接Oracle数据库?

使用 cx_oracle 批量下载表

cx_Oracle模块Windows安装

在 Python 中使用 cx_Oracle 中的 executemany() 从批量插入数据加载中查找错误记录

Python cx_Oracle。用 executemany() 敲头

你如何在 python 中处理 graphql 查询和片段?