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