老白的释然 发表于 2018-4-2 15:20:14

Python 连接 oracle 数据库总结

最近公司要求使用python查询oracle数据库,下面把网上的资料整理一下:
1)python安装cx_Oracle模块,可以下载离线包,最好在线pip 安装。
2)安装oracle客户端:地址:http://www.oracle.com/technetwork/database/features/instant-client/index-0
97480.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版本不兼容的问题,其实归
根揭底还是编码的问题啦!

海海豚 发表于 2018-4-2 15:48:06

谢谢分享~

梦想家 发表于 2018-4-4 15:43:36

:victory:
页: [1]
查看完整版本: Python 连接 oracle 数据库总结