python操作Oracle數(shù)據(jù)庫(kù),你學(xué)會(huì)了嗎?
點(diǎn)擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進(jìn)行關(guān)注
回復(fù)“書籍”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書
1. 準(zhǔn)備工作
① 首先,你必須安裝好Oracle數(shù)據(jù)庫(kù)。Oracle數(shù)據(jù)庫(kù)的安裝并不是那么容易,大家可以去找一個(gè)安裝教程,慢慢研究。
② 其次,你既然用Python操作Oracle,你必須要安裝Python吧。Python的安裝過(guò)程較為簡(jiǎn)單。但是有一點(diǎn)需要注意:一定要安裝64位的Python,不要使用32位的。
③ 最后,也是最復(fù)雜的一步。我們需要進(jìn)行instantclient的下載安裝和環(huán)境配置,它是oracle數(shù)據(jù)庫(kù)的客戶端,這個(gè)最好也是下載64位的。
2. instantclient的安裝與配置
1)instantclient的下載地址
在進(jìn)行instantclient的安裝與配置之前,我先提供給大家一個(gè)下載鏈接,供大家下載,我們直接下載像11或者12這樣的高版本,即可。
instantclient的下載地址:http://suo.im/5Dlqrr
2)instantclient的安裝
① 直接解壓instantclient安裝包;

② 解壓后的文件位置,不要隨意放置;
我們需要將instantclient安裝包,解壓后得到的文件夾,放置在Oracle安裝目錄下的product的直接字目錄下。

3)instantclient的環(huán)境配置
① 按照?qǐng)D中操作,完成環(huán)境變量的配置;

② 將其解壓目錄下的oraociei11.dll、oraocci11.dll、oci.dll文件復(fù)制到python安裝目錄的Lib/site-packages文件夾下;
instantclient安裝包解壓后的文件夾:

python安裝目錄下的Lib/site-packages文件夾:

3. 其他需要特別注意的點(diǎn)
1)解決中文亂碼問(wèn)題
當(dāng)使用Python讀取到Oracle數(shù)據(jù)庫(kù)中的某張表,如果該表中存在中文,會(huì)出現(xiàn)中文亂碼的問(wèn)題。因此需要設(shè)置NLS_LANG環(huán)境變量,來(lái)解決這個(gè)問(wèn)題,下面提供了兩種方式。
① 打開CMD黑窗口,輸入以下命令;
?C:\Users\AA>set?nls_lang=SIMPLIFIED?CHINESE_CHINA.ZHS16GBK② 直接在寫代碼的時(shí)候,輸入以下命令;
import?os
os.environ['NLS_LANG']?=?'SIMPLIFIED?CHINESE_CHINA.UTF8'注意: 上述兩種方式書寫命令的位置不同,不要弄錯(cuò)了。其次,上述設(shè)置NLS_LANG環(huán)境變量的方式,僅對(duì)當(dāng)前窗口有效。其實(shí),我們也可以永久修改NLS_LANG環(huán)境變量,但是請(qǐng)不要這么做。
2)關(guān)于cx_Oracle驅(qū)動(dòng)包的安裝,需要注意的問(wèn)題
cx_Oracle是Python操作Oracle數(shù)據(jù)庫(kù),需要使用的驅(qū)動(dòng)包。類似于Python操作MySQL使用的pymysql驅(qū)動(dòng)包。
對(duì)于我來(lái)說(shuō),我直接使用下面這個(gè)命令,就安裝成功:
pip?insatll?cx_Oracle如果你的系統(tǒng)環(huán)境,導(dǎo)致安裝失敗,我這里提供兩個(gè)鏈接,供你下載和學(xué)習(xí):
cx_Oracle驅(qū)動(dòng)包的下載:http://suo.im/6fGFSR
cx_Oracle安裝教程:http://suo.im/5DlvxT
4. Python與Oracle交互操作
其實(shí)Python操作Oracle數(shù)據(jù)庫(kù),和Python操作MySQL數(shù)據(jù)庫(kù),基本上都是一樣的道理,一通百通。我之前已經(jīng)寫了一個(gè)Python操作MySQL數(shù)據(jù)庫(kù)的詳細(xì)教程,下面提供給大家這個(gè)鏈接。
Python操作MySQL數(shù)據(jù)庫(kù):http://suo.im/6fGJhl
1)Python鏈接Oracle服務(wù)器的3種方式
① 用戶名、密碼和監(jiān)聽寫在一起
import?cx_Oracle
db?=?cx_Oracle.connect('scott/a123456@DESKTOP-V4LKB10:1521/orcl')② 用戶名、密碼和監(jiān)聽分開寫
import?cx_Oracle
db?=?cx_Oracle.connect("scott","a123456","192.168.2.1:1521/orcl")③ 配置監(jiān)聽并連接
import?cx_Oracle
moniter?=?cx_Oracle.makedsn('192.168.2.1',1521,'orcl')
db?=?cx_Oracle.connect('scott','a123456',moniter)2)Python怎么獲取Oracle中的數(shù)據(jù)(查)
數(shù)據(jù)分析師日常工作用到最多的就是“查”,因此我們只講述怎么查數(shù)據(jù)。關(guān)于其它的增刪改操作,都是類似于MySQL,這里就不詳細(xì)說(shuō)明。
① 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?=?"我的名字叫{},所在部門是{},工資是{}美元".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?=?"我的名字叫{},所在部門是{},工資是{}美元".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é)果如下:

-------------------?End?-------------------
往期精彩文章推薦:
手把手用Python教你如何發(fā)現(xiàn)隱藏wifi
手把手教你用Python做個(gè)可視化的“剪刀石頭布”小游戲
Python基礎(chǔ)語(yǔ)法——代碼規(guī)范&判斷語(yǔ)句&循環(huán)語(yǔ)句

歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群】
萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行
/今日留言主題/
隨便說(shuō)一兩句吧~~
