python读取oracle数据

1、安装cx_Oracle
pip install cx_Oracle
安装文档http://cx-oracle.readthedocs.io/en/latest/installation.html,里面有可能出现的问题的解决办法,如DPI-1047: Oracle Client library cannot be loaded

如果python是64位的,那么cx_Oracle和oracle的instantclient客户端都必需是64位的,否则会出错:…..%1 不是有效的 Win32 应用程序
2、安装oracle客户端instantclient
下载地址:http://www.oracle.com/technetwork/topics/winx64soft-089540.html
下载上面的文件(数据库为中文字符集的必须下basic版)。此客户端必须由Microsoft Visual Studio 2013 Redistributable.支持,下载地址:
https://support.microsoft.com/en-us/help/3179560/update-for-visual-c-2013-and-visual-c-redistributable-package
下载vcredist_x64.exe后运行(如果不安装,连接数据库时则会报错:…..%1 无法加载模块)
然后安装instantclient:
(1)、将下载的Basic版压缩包解压至某目录下(该目录可依个人喜好自行定义,笔者放在D:\Oracle中);
(2)、配置环境变量:
1) 变量名:ORACLE_HOME
变量值:D:\Oracle\instantclient_12_2
2) 变量名:TNS_ADMIN
变量值:D:\Oracle\instantclient_12_2\
说明:该配置项指定tnsnames.ora文件的存放路径。建议该值最后的’\’符号不要略去,不然可能会影响到PLSQL,笔者在配置时,缺少了‘\’,结果PLSQL无法读取到该文件中的数据。但貌似不会影响sqlplus的使用。
如果没有tnsnames.ora,新建,加入数据库配置项
ZHXY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = NDSID)
)
)

3) 变量名:NLS_LANG
变量值:AMERICAN_AMERICA.ZHS16GBK

说明:该值定义所连接的数据库使用的编码,其它类型可自己到服务器看一下或网上查找一下。
执行的语句为:
cursor.execute(“select userenv(‘language’) nls_lang from dual”)
[(‘AMERICAN_AMERICA.ZHS16GBK’,)]
不同服务器可能显示不一样
4) 修改Path变量,添加 D:\Oracle\instantclient_12_2,要保证该路径在其他oracle配置路径前
3、 错误解决
如果还报错,将D:\Oracle\instantclient_12_2下的*.dll文件复制到python的安装路径Lib\site-packages文件夹下C:\Users\Thinkpaad\Anaconda2\Lib\site-packages。
然后重启jupyter(命令运行环境)试试看。
4、测试
在pycharm中新建*.py文件,运行测试。或者可以在jupyter中执行脚本。

# -*- coding:utf-8 -*-
import cx_Oracle

print("cx_Oracle.version:", cx_Oracle.version)

host = "192.168.1.3"
port = "1521"
sid = "ndsid"
dsn = cx_Oracle.makedsn(host, port, sid)
print(dsn)
connection = cx_Oracle.connect("user1", "1234567", dsn)
cursor = cx_Oracle.Cursor(connection)  # 返回连接的游标对象
cursor.execute("select userenv('language') nls_lang from dual") #显示数据库的字符集
result = cursor.fetchall()
print result
cursor.close()
connection.close()

你可能感兴趣的:(python基础教程)