python實(shí)現(xiàn)與Oracle數(shù)據(jù)庫(kù)交互操作示例
1、安裝準(zhǔn)備
① 正確安裝好Oracle數(shù)據(jù)庫(kù)(我的電腦是64位的,但是我最開(kāi)始安裝的是Oracle32。因此,你要是有64位的安裝包,你就安裝64位的。)
② 正確安裝好python(注意:這個(gè)最好是安裝64位的,使用32位的python操作Oracle數(shù)據(jù)庫(kù),會(huì)出現(xiàn)很多問(wèn)題。)
③oracle數(shù)據(jù)庫(kù)客戶(hù)端instantclient下載安裝和環(huán)境變量配置(注意:現(xiàn)在電腦一般都是64位的,由于python安裝的是64位的,因此instantclient也是安裝64位的。)
注意:需要Oracle安裝包,可以留言說(shuō)明!??!
2、instantclient的安裝說(shuō)明
instantclient下載地址:http://chabaoo.cn/database/572638.html
版本選擇:你可以選擇版本11或者版本12這樣的高版本,進(jìn)行下載即可。
3、instantclient安裝步驟
① 下載好instantclient后,進(jìn)行解壓;
注意:這個(gè)解壓位置不要隨便放置,而是放在Oracle安裝目錄下的product目錄下(這個(gè)放在product的直接子目錄下。)
② 配置instantclient的環(huán)境變量;
③ 將instantclient解壓目錄下的oraociei11.dll、oraocci11.dll、oci.dll文件復(fù)制到python安裝目錄的Lib/site-packages下;
instantclient的解壓目錄:
python安裝目錄下的Lib/site-packages目錄:
4、還有幾個(gè)需要注意的地方
1)設(shè)置NLS_LANG環(huán)境變量:解決中文亂碼
當(dāng)讀取的Oracle數(shù)據(jù)庫(kù)中的某張表中含有中文,就會(huì)出現(xiàn)中文亂碼的問(wèn)題,因此需要我們?cè)O(shè)置這個(gè)環(huán)境變量,來(lái)解決Oracle中的中文亂碼問(wèn)題。
NLS_LANG,全稱(chēng)是National Language Support(NLS),它是一個(gè)環(huán)境變量 ,用于定義語(yǔ)言,地域以及字符集屬性。對(duì)于非英語(yǔ)的字符集 ,NLS_LANG的設(shè)置就非常重要。
① 直接在Windows中的CMD黑窗口中,設(shè)置NLS_LANG環(huán)境變量;
C:\Users\AA>set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
② 直接在代碼中,添加代碼設(shè)置NLS_LANG環(huán)境變量(常用的方式);
import os os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
注意:上面兩種方式設(shè)置NLS_LANG環(huán)境變量,都僅對(duì)當(dāng)前會(huì)話(huà)窗口有效,一旦關(guān)閉當(dāng)前窗口,又會(huì)恢復(fù)至原來(lái)的狀態(tài),這樣恰恰是我們想要的。其實(shí),也可以永久修NLS_LANG環(huán)境變量,但是不建議這么做,因?yàn)檫@樣會(huì)帶來(lái)一系列的問(wèn)題。
2)關(guān)于TNS_ADMIN環(huán)境變量的說(shuō)明
關(guān)于這個(gè)環(huán)境變量的設(shè)置,我提供一個(gè)鏈接供你們參考,因?yàn)槟壳熬蛯W(xué)習(xí)來(lái)看我還沒(méi)有用到這個(gè):
https//chabaoo.cn/article/226529.htm
3)關(guān)于python中,cx_Oracle驅(qū)動(dòng)包的安裝
對(duì)于我來(lái)說(shuō),我是直接使用"pip insatll cx_Oracle"就安裝成功了。
如果你不成功,你可以使用如下鏈接,下載對(duì)應(yīng)版本的安裝包:
https://www.lfd.uci.edu/~gohlke/pythonlibs/#cx_oracle
如果還是不會(huì),再提供下面一個(gè)安裝說(shuō)明,希望對(duì)你有幫助:
http://chabaoo.cn/article/226537.htm
5、python操作Oracle數(shù)據(jù)庫(kù)
需要注意的是:當(dāng)配置好所有的東西之后,其實(shí)用python操作Oracle和操作MySQL,在寫(xiě)代碼上基本上大同小異。
因此在學(xué)習(xí)下面的代碼之前,你可以參考我之前寫(xiě)的python操作MySQL數(shù)劇庫(kù)的文章
1)python連接數(shù)據(jù)庫(kù)的3種方式
連接語(yǔ)法:cx_Oracle.connect(‘username/password@host/監(jiān)聽(tīng)')
host代表你的Oracle服務(wù)器所在的地址,因?yàn)槲业腛racle服務(wù)器就安裝在本機(jī)上,因此我這里可以寫(xiě)localhost,我可以寫(xiě)主機(jī)名DESKTOP-V4LKB10,我還可以寫(xiě)主機(jī)IP
① 用戶(hù)名、密碼和監(jiān)聽(tīng)寫(xiě)在一起
import cx_Oracle db = cx_Oracle.connect('scott/a123456@DESKTOP-V4LKB10:1521/orcl')
② 用戶(hù)名、密碼和監(jiān)聽(tīng)分開(kāi)寫(xiě)
import cx_Oracle db = cx_Oracle.connect("scott","a123456","192.168.2.1:1521/orcl")
③ 配置監(jiān)聽(tīng)并連接
import cx_Oracle moniter = cx_Oracle.makedsn('192.168.2.1',1521,'orcl') db = cx_Oracle.connect('scott','a123456',moniter)
2)查詢(xún)數(shù)據(jù)…查
① fetchone()
:一次獲取一條記錄
import cx_Oracle # 注意:一定要加下面這兩行代碼,負(fù)責(zé)會(huì)中文亂碼; import os os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8' db = cx_Oracle.connect("scott","a123456","192.168.2.1:1521/orcl") cursor = db.cursor() cursor.execute('select count(*) from emp1') aa = cursor.fetchone() print(aa) cursor.execute('select ename,deptno,sal from emp1') for i in range(aa[0]): a,b,c = cursor.fetchone() d = "我的名字叫{},所在部門(mén)是{},工資是{}美元".format(a,b,c) display(d) db.close()
截取部分結(jié)果如下:
② fetchall()
:一次獲取所有記錄
import cx_Oracle # 注意:一定要加下面這兩行代碼,負(fù)責(zé)會(huì)中文亂碼; import os os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8' db = cx_Oracle.connect("scott","a123456","192.168.2.1:1521/orcl") cursor = db.cursor() cursor.execute('select ename,deptno,sal from emp1') aa = cursor.fetchall() # print(aa) for a,b,c in aa: d = "我的名字叫{},所在部門(mén)是{},工資是{}美元".format(a,b,c) display(d) db.close()
截取部分結(jié)果如下:
③ 使用pandas中的read_sql()
方法,將提取到的數(shù)據(jù)直接轉(zhuǎn)化為DataFrame進(jìn)行操作
import cx_Oracle import pandas as pd import os os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8' db = cx_Oracle.connect("scott","a123456","192.168.2.1:1521/orcl") cursor = db.cursor() df1 = pd.read_sql("select * from emp where deptno=20",db) display(df1) df2 = pd.read_sql("select * from emp where deptno=30",db) display(df2)
結(jié)果如下:
注意:由于其他操作和python操作MySQL類(lèi)似,這里就不再贅述,你們可以自行下去嘗試。
以上就是python實(shí)現(xiàn)與Oracle數(shù)據(jù)庫(kù)交互操作示例的詳細(xì)內(nèi)容,更多關(guān)于python與Oracle數(shù)據(jù)庫(kù)交互操作的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- python連接oracle數(shù)據(jù)庫(kù)實(shí)例
- Python3.6連接Oracle數(shù)據(jù)庫(kù)的方法詳解
- Python編程實(shí)戰(zhàn)之Oracle數(shù)據(jù)庫(kù)操作示例
- Python操作Oracle數(shù)據(jù)庫(kù)的簡(jiǎn)單方法和封裝類(lèi)實(shí)例
- python鏈接Oracle數(shù)據(jù)庫(kù)的方法
- 一步步教你用python連接oracle數(shù)據(jù)庫(kù)
- 利用Python連接Oracle數(shù)據(jù)庫(kù)的基本操作指南
- python連接oracle數(shù)據(jù)庫(kù)操作實(shí)例及遇到的異常
相關(guān)文章
django+xadmin+djcelery實(shí)現(xiàn)后臺(tái)管理定時(shí)任務(wù)
這篇文章主要介紹了django+xadmin+djcelery實(shí)現(xiàn)后臺(tái)管理定時(shí)任務(wù),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08用python生成mysql數(shù)據(jù)庫(kù)結(jié)構(gòu)文檔
大家好,本篇文章主要講的是用python生成mysql數(shù)據(jù)庫(kù)結(jié)構(gòu)文檔,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下2022-01-01在Python中通過(guò)threading模塊定義和調(diào)用線(xiàn)程的方法
由于著名的GIL的存在,Python中雖然能創(chuàng)建多條線(xiàn)程,但卻不能同時(shí)執(zhí)行...anyway,這里我們還是來(lái)學(xué)習(xí)一下在Python中通過(guò)threading模塊定義和調(diào)用線(xiàn)程的方法2016-07-07從入門(mén)到精通:玩轉(zhuǎn)Python?Fire庫(kù)
想快速打造屬于你的Python?GUI應(yīng)用嗎?拋開(kāi)復(fù)雜的代碼,用Python?Fire庫(kù)就能輕松實(shí)現(xiàn)!本指南將引領(lǐng)你從零起步,駕馭Python?Fire的強(qiáng)大功能,讓編程既簡(jiǎn)單又高效,準(zhǔn)備好了嗎?讓我們開(kāi)始玩轉(zhuǎn)Python?Fire,開(kāi)啟你的編程冒險(xiǎn)吧!2024-02-02