使用pycharm連接讀取orcl數(shù)據(jù)庫的表的操作方法
背景:工作需要
需求:使用pycharm訪問遠(yuǎn)程oracle類型數(shù)據(jù)庫的表,表中包含lob字段(這也是個(gè)坑?。?/strong>
麻了,搞了一個(gè)星期,終于成功了,真可謂是每步都有坑,看的文章也有小一百篇了,我要及時(shí)把自己的踩坑路總結(jié)出來,希望對(duì)你有用喲~
一、在Pycharm中下載cx_Oracle包
如果加載不成功,使用Anaconda Prompt在自己的環(huán)境中下載
我是在Pycharm終端執(zhí)行如下代碼
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple cx_Oracle
然后開開心心運(yùn)行,本以為到這里就成功結(jié)束了
import cx_Oracle as oracle # def main(): # cx_Oracle.connect("用戶名 / 密碼@ Oracle服務(wù)器IP / Oracle的SERVICE_NAME") db = oracle.connect('XXX/XXX@IP地址:端口/sid_name')#換成自己遠(yuǎn)程要連的庫 c = db.cursor() # 獲取cursor x = c.execute("select * from XXX WHERE XXX") # 使用cursor進(jìn)行各種查詢操作 rows = c.fetchall() for row in rows: for v in row: print(v) c.close() # 關(guān)閉cursor db.close() # 關(guān)閉連接 if __name__ == '__main__': main()
然而上來就是個(gè)error!
Cannot locate a 64-bit Oracle Client library: “The specified module could not be found”.
開始了漫長(zhǎng)而無頭緒的檢索和閱讀和嘗試!沒用的略過,有用的兩步如下:
二、下載orcl instantclient
鑒于我之前已經(jīng)下載并解壓好了instantclient_21_12,如沒下載請(qǐng)轉(zhuǎn)至Oracle客戶端官網(wǎng)
因?yàn)槲业膒ycharm安裝的是最新版,電腦也是最新版,無腦揀最新的上~
三、復(fù)制3個(gè)dll后綴的文件至pychrm環(huán)境安裝包的位置
以我的為例,我用的是vene環(huán)境,可以點(diǎn)文件-設(shè)置-python解釋器查看當(dāng)前使用的環(huán)境
最簡(jiǎn)單的方式,把instantclient_21_12中的這三個(gè)文件選中復(fù)制
直接在pycharm中點(diǎn)開vene/Lib/site_packages,粘貼進(jìn)來
粘貼完成后,再次運(yùn)行就成功了,不行的話重啟一下pycharm
ps:還不行的話去設(shè)置下環(huán)境變量
我的到步驟三就OK了,看自己情況
win11桌面右鍵,隨便選一個(gè)顯示設(shè)置/個(gè)性化,進(jìn)入設(shè)置彈框頁面,輸入環(huán)境進(jìn)行搜索
在用戶變量新建一個(gè)變量名為instantclient,變量值為instantclient_21_12所在路徑的東西
搞完后再次重啟pycharm試試
四、查詢表并輸出數(shù)據(jù)框形式
#運(yùn)行成功 import cx_Oracle as cx import pandas as pd def visitOracle(sql): # cx_Oracle.connect("用戶名 / 密碼@ Oracle服務(wù)器IP / Oracle的SERVICE_NAME") conn = cx.connect('XXX/XXX@IP地址:端口/sid_name')#換成自己遠(yuǎn)程要連的庫 cursor = conn.cursor() cursor.execute(sql) # 使用cursor進(jìn)行各種操作 # 讀取字段名 index = cursor.description row = list() for i in range(len(index)): row.append(index[i][0]) # 獲取返回信息 data = cursor.fetchall() result = pd.DataFrame(list(data), columns=row) # 關(guān)閉鏈接,釋放資源 cursor.close() conn.close() return result sql = "select * from XXX WHERE XXX'" df = visitOracle(sql) print(df)
如果是普通的表,是運(yùn)行成功的,鑒于我的表有一個(gè)字段是長(zhǎng)文本CLOB類型,所以它報(bào)錯(cuò)了
cx_Oracle.DatabaseError: DPI-1040: LOB was already closed
步驟五是我嘗試成功的解決辦法
五、查詢含有l(wèi)ob類型字段的表
5.1 在Pycharm中下載sqlalchemy包
- 使用pip install sqlalchemy 和設(shè)置那里安裝均失敗
- SQLAlchemy · PyPI 安裝指定版本也失敗了
- 使用鏡像源安裝成功??!
#pip3 install flask-sqlalchemy -i https://pypi.tuna.tsinghua.edu.cn/simple pip3 install sqlalchemy -i https://pypi.tuna.tsinghua.edu.cn/simple
5.2 查詢數(shù)據(jù)庫并訪問表
#---------運(yùn)行成功 import pandas as pd import cx_Oracle from sqlalchemy import create_engine # 數(shù)據(jù)庫連接信息 dsn_tns = cx_Oracle.makedsn('YOUR_HOST', 'YOUR_PORT', service_name='YOUR_SERVICE_NAME') conn_string = f"oracle+cx_oracle://{YOUR_USERNAME}:{YOUR_PASSWORD}@{dsn_tns}" # 創(chuàng)建數(shù)據(jù)庫引擎 engine = create_engine(conn_string) # 構(gòu)建SQL查詢語句 query = f"select {number_column}, {clob_column} FROM {table_name} where rownum<=5" # 使用pandas的read_sql_query方法執(zhí)行查詢并獲取結(jié)果 df = pd.read_sql_query(query, con=engine) print(df) # 關(guān)閉數(shù)據(jù)庫連接 engine.dispose()
或者下面的代碼,自定義一個(gè)函數(shù)的形式,實(shí)現(xiàn)多次調(diào)用。
##----運(yùn)行成功 import pandas as pd import cx_Oracle as cx from sqlalchemy import create_engine def visitOracle(sql): # 數(shù)據(jù)庫連接信息 dsn_tns = cx.makedsn(('YOUR_HOST', 'YOUR_PORT', service_name='YOUR_SERVICE_NAME') conn = f"oracle+cx_oracle://{YOUR_USERNAME}:{YOUR_PASSWORD}@{dsn_tns}" # 創(chuàng)建數(shù)據(jù)庫引擎 engine = create_engine(conn) # 使用pandas的read_sql_query方法執(zhí)行查詢并獲取結(jié)果 df = pd.read_sql_query(sql, con=engine) # 關(guān)閉數(shù)據(jù)庫連接 engine.dispose() return df ##診療記錄 sql = "select {number_column}, {clob_column} FROM {table_name} where rownum<=5"" df = visitOracle(sql) print(df)
以上兩種代碼都可以執(zhí)行成功??!
到此這篇關(guān)于使用pycharm連接讀取orcl數(shù)據(jù)庫的表的文章就介紹到這了,更多相關(guān)pycharm orcl數(shù)據(jù)庫的表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- pycharm工具連接mysql數(shù)據(jù)庫失敗問題
- 詳解pycharm連接不上mysql數(shù)據(jù)庫的解決辦法
- 圖文詳解Django使用Pycharm連接MySQL數(shù)據(jù)庫
- pycharm訪問mysql數(shù)據(jù)庫的方法步驟
- 解決python3 Pycharm上連接數(shù)據(jù)庫時(shí)報(bào)錯(cuò)的問題
- pycharm中連接mysql數(shù)據(jù)庫的步驟詳解
- Django1.7+python 2.78+pycharm配置mysql數(shù)據(jù)庫教程
- pycharm 使用心得(六)進(jìn)行簡(jiǎn)單的數(shù)據(jù)庫管理
相關(guān)文章
Django中使用haystack+whoosh實(shí)現(xiàn)搜索功能
這篇文章主要介紹了Django之使用haystack+whoosh實(shí)現(xiàn)搜索功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10用Python進(jìn)行行為驅(qū)動(dòng)開發(fā)的入門教程
這篇文章主要介紹了用Python進(jìn)行行為驅(qū)動(dòng)開發(fā)的入門教程,本文也對(duì)BDD的概念做了詳細(xì)的解釋,需要的朋友可以參考下2015-04-04Python 中eval()函數(shù)的正確使用及其風(fēng)險(xiǎn)分析(使用示例)
eval()是一個(gè)功能強(qiáng)大的工具,但使用時(shí)必須非常小心,了解其工作原理和潛在的風(fēng)險(xiǎn)是確保安全使用的關(guān)鍵,通過遵循上述建議,可以在享受eval()帶來的便利的同時(shí),最大限度地減少安全風(fēng)險(xiǎn),本文介紹Python 中`eval()`函數(shù)的正確使用及其風(fēng)險(xiǎn)分析,感興趣的朋友一起看看吧2024-07-07Python通過VGG16模型實(shí)現(xiàn)圖像風(fēng)格轉(zhuǎn)換操作詳解
這篇文章主要介紹了Python通過VGG16模型實(shí)現(xiàn)圖像風(fēng)格轉(zhuǎn)換操作,結(jié)合實(shí)例形式詳細(xì)分析了Python使用VGG16模型實(shí)現(xiàn)圖像風(fēng)格轉(zhuǎn)換的具體原理、操作步驟與實(shí)現(xiàn)方法,需要的朋友可以參考下2020-01-01簡(jiǎn)單了解python PEP的一些知識(shí)
這篇文章主要介紹了簡(jiǎn)單了解python PEP的一些知識(shí),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07