中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python連接oracle配置

發布時間:2020-04-06 03:05:07 來源:網絡 閱讀:4950 作者:司馬遼太 欄目:關系型數據庫


環境:

操作系統:win7 64位,CPUinterpc

Oracle服務端:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

Oracle本地客戶端:Release 11.2.0.1.0  32bit Production

Python版本:python2.7.5 (安裝路徑:C:\Python27\

 

cx_Oracle版本:cx_Oracle-5.2.1-11g.win-amd64-py2.7.exe

Iinstantclient版本:instantclient-basic-win-x86-64-11.2.0.1.0.zip

 

 

 

在學習python過程中,需要連接oracle數據庫,所以要安裝cx_Oracle

 

安裝cx_Oracle-5.2.1-11g.win-amd64-py2.7.exeimport cx_Oracle報錯。提示:import cx_Oracle

ImportError: DLL load failed: %1 不是有效的 Win32 應用程序。根據報錯提示應該是缺少dll文件,因為我本機oracle客戶端是32位的,64位的cx_Oracle程序調用32位的動態庫肯定會報錯。

 

根據文章http://blog.csdn.net/huzhenwei/article/details/3946308指點,去oracle網站下載了instance client,地址是

http://www.oracle.com/technology/software/tech/oci/instantclient/index.html。

我下載了instantclient-basic-win-x86-64-11.2.0.1.0.zip這個版本。

直接解壓C:\instantclient_11_2 目錄下。

 

環境變量系統變量中增加:

ORACLE_HOME = C:\instantclient_11_2 (網上說需要,但是測試不加也可以)

TNS_ADMIN = C:\instantclient_11_2  (網上說需要,但是測試不加也可以)
NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK
修改Path變量,在后面添加 C:\instantclient_11_2

 

 

然后把解壓包中的oci.dll文件放到%python_home%\Lib\site-packages 下,再次import不會報錯了。

 

 

執行測試python腳本報錯,提示cx_Oracle Interface Error: Unable to acquire Oracle enviroment handle。啟動PLSQL登陸打開的是剛才的tns,但登陸就報錯ORA-1以為是instance client和之前安裝的32位oracle client沖突,ORA-12557。感覺是這個64位的instance client與之前裝的32位oracle client沖突了。于是把環境變量里的ORACLE_PATH刪掉,就可以登陸PLSQL了。但測試語句還是報那個錯。折騰了半天,最后死馬當活馬醫吧,嘗試著把C:\instantclient_11_2里面的dll文件都拷貝到了python的C:\Python27\Lib\site-packages目錄下,又RUN了一下,居然不報錯了。 然后逐個刪掉,最后發現oraociei11.dll刪掉會報錯,而其它dll刪掉重新Run都不會報錯。

不過使用PLSQL登陸還是會報錯,只好把環境變量ORACLE_HOME刪掉了,并不影響cx_Oracle的使用。原理不太清楚,先記錄下來。

 

Python測試腳本:

#!/usr/bin/python
#coding=utf-8
import cx_Oracle

username = "smb"
passwd = "czty_smb"
host = "192.168.150.233"
port = "1521"
sid = "zsms"
dsn = cx_Oracle.makedsn(host, port, sid)
con = cx_Oracle.connect(username, passwd, dsn)
cursor= con.cursor()
sql = 'SELECT smbms, prtms  FROM t_user_mobile_dz'
cursor.execute(sql)
result = cursor.fetchall()
print "Total: " + str(cursor.rowcount)
for row in result:
	print row
cursor.close()
con.close()

 


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

彰化市| 咸宁市| 陵川县| 黄山市| 五原县| 大渡口区| 鹰潭市| 兴安盟| 汶川县| 洮南市| 隆尧县| 宁南县| 泰来县| 荣成市| 鄂州市| 广南县| 皋兰县| 化隆| 宜昌市| 丹巴县| 高要市| 台东县| 沧源| 盈江县| 苍山县| 宁安市| 台中县| 祁阳县| 延寿县| 金秀| 广安市| 莱州市| 乐平市| 千阳县| 大余县| 福海县| 元谋县| 鹿泉市| 江源县| 阳春市| 聂拉木县|