最近公司要求使用 python 查询 oracle 数据库,下面把网上的资料整理一下:
1)python 安装 cx_Oracle 模块,可以下载离线包,最好在线 pip 安装。
2)安装 oracle 客户端:地址:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
这里有各种版本,结合自己的机器下载相应版本就好。我下载的是 32 位的 basic11 版本(注意要和自己 python 的版本相符,我自己电脑里面有 python2.7(32 位)和 python3.4(64 位));将解压好的文件夹路径加入环境变量(我的路径是:E:\instantclient_11_2),并且在该文件夹中新建一个文件 tnsnames.ora,内容是:
jasonChang =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.130.201.118)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = tkpi)
)
)
3)代码连接数据库:
import cx_Oracle # 引用模块 cx_Oracle
conn=cx_Oracle.connect('tkinsure','ins185','10.137.146.5:1521/tkpi') # 连接数据库
rs=conn.cursor() # 获取 cursor
rs.execute('select sudo from tickl') # 使用 cursor 进行各种操作
result = rs.fetchall()
print(result)
rs.close() # 关闭 cursor
conn.close()
备注:如果在代码中遇到了莫名其妙的错误,请查看 oracle 客户端的版本是不是适合 python 版本,或者 python 和 cx_Oracle 是不是合适,因为我在运行代码的时候发现了一个错误:
conn = cx_Oracle.connect('tkinsure','ins185','10.137.146.5:1521/ursl')
UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 82-83: invalid continuation byte,乍一看是编码的问题,实际上是 oracle 客户端版本(instantclient_11_2)和 python 版本不兼容的问题,其实归根揭底还是编码的问题啦!