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