Python連接Oracle的多種方式小結(jié)
前言
庫/包 | 描述 | 優(yōu)點(diǎn) | 缺點(diǎn) | 使用場景 |
---|---|---|---|---|
oracledb | Oracle 官方 Python 客戶端庫。 - 官方支持 |
- 直接與 Oracle 數(shù)據(jù)庫交互
- 配置靈活 - 配置可能較為復(fù)雜
- 主要用于直接數(shù)據(jù)庫操作,不支持 ORM 需要直接與 Oracle 數(shù)據(jù)庫交互的場景
cx_Oracle Oracle 官方 Python 客戶端庫。 - 官方支持 - 功能全面
- 適用于多種 Oracle 數(shù)據(jù)庫操作 - 安裝和配置較復(fù)雜
- 需要手動管理連接和資源 直接數(shù)據(jù)庫操作,支持復(fù)雜查詢
SQLAlchemy 通用的 SQL 工具包和 ORM,支持多種數(shù)據(jù)庫,包括 Oracle。 - 支持多種數(shù)據(jù)庫 - 提供 ORM 功能,簡化數(shù)據(jù)庫操作
- 統(tǒng)一接口 - 學(xué)習(xí)曲線陡峭
- 對于簡單操作可能過于復(fù)雜 需要 ORM 支持或跨數(shù)據(jù)庫操作場景
1. SQLAlchemy
推薦使用這個包,寫的比較詳細(xì):Python中SQLAlchemy庫的使用方法分析_python_腳本之家 (jb51.net)
2. oracledb
官方提供的 Python 客戶端庫,用于連接和操作 Oracle 數(shù)據(jù)庫
是 cx_Oracle 的繼任者,并在很多方面進(jìn)行了改進(jìn)和優(yōu)化
安裝與配置:
pip install oracledb
Oracle 客戶端:需要 Oracle Instant Client
安裝路徑需要在系統(tǒng)環(huán)境變量中配置,或者在代碼中指定路徑
import oracledb oracledb.init_oracle_client(lib_dir=r"D:\instantclient_21_10")
- 連接數(shù)據(jù)庫:
連接字符串(DSN):可以使用 DESCRIPTION 或 TNS 配置字符串。支持直接的 IP 地址和端口,或使用 TNS 名稱
connection = oracledb.connect(user='username', password='password', dsn=dsn)
- 執(zhí)行 SQL 查詢:
使用 cursor 對象來執(zhí)行 SQL 語句
cursor = connection.cursor() cursor.execute("SELECT * FROM my_table") results = cursor.fetchall()
- 事務(wù)管理:
提交事務(wù):需要顯式地調(diào)用 commit(),connection.commit()
回滾事務(wù):需要顯式地調(diào)用 rollback(),connection.rollback()
錯誤處理:通過捕獲異常來處理數(shù)據(jù)庫操作中的錯誤
try: # 執(zhí)行操作 pass except oracledb.DatabaseError as e: print(e)
- 游標(biāo)與連接管理:
關(guān)閉游標(biāo)和連接:在完成數(shù)據(jù)庫操作后,需要關(guān)閉游標(biāo)和連接以釋放資源
cursor.close() connection.close()
最終的測試Demo如下:
import oracledb # 數(shù)據(jù)庫連接信息 dsn = ( "(DESCRIPTION=" "(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.197.0.200)(PORT=1521)))" "(CONNECT_DATA=(SERVICE_NAME=prod)))" ) username = 'root' password = 'root' oracledb.init_oracle_client(lib_dir=r"D:\instantclient_21_10") # 創(chuàng)建連接 connection = oracledb.connect(user=username, password=password, dsn=dsn) try: # 創(chuàng)建一個游標(biāo) cursor = connection.cursor() # SQL 查詢語句 sql_query = """ sql語句 """ # 執(zhí)行查詢 cursor.execute(sql_query) # 獲取所有結(jié)果 results = cursor.fetchall() # 打印結(jié)果 for row in results: print(row) except Exception as e: print(e) finally: # 關(guān)閉游標(biāo)和連接 cursor.close() connection.close()
3. cx_Oracle
Python 中連接 Oracle 數(shù)據(jù)庫的官方庫
支持多種 Oracle 數(shù)據(jù)庫功能,并且是 Oracle 官方推薦的客戶端庫之一
和上面同理,配置一個客戶端,講講差異之處
特性 | 優(yōu)點(diǎn) | 缺點(diǎn) |
---|---|---|
性能 | 高性能,支持大數(shù)據(jù)量處理和高并發(fā)操作 | - |
功能 | 支持復(fù)雜的數(shù)據(jù)庫功能,如綁定變量、批量操作、PL/SQL 存儲過程 | - |
官方支持 | 由 Oracle 官方提供和維護(hù),確保兼容性和穩(wěn)定性 | - |
配置復(fù)雜性 | - | 配置 Oracle 客戶端和庫可能較為復(fù)雜 |
庫更新頻率 | - | 版本更新可能較慢,需關(guān)注新版本的兼容性 |
資源管理 | - | 需要手動管理連接和游標(biāo),資源管理較為繁瑣 |
多線程支持 | 具有良好的多線程支持,可以在多線程環(huán)境下高效運(yùn)行 | - |
最終的測試Demo如下:
import cx_Oracle # 設(shè)置 Oracle 客戶端庫路徑 cx_Oracle.init_oracle_client(lib_dir=r"D:\instantclient_21_10") # 連接數(shù)據(jù)庫 dsn = cx_Oracle.makedsn('10.197.0.200', 1521, service_name='prod') connection = cx_Oracle.connect(user='root', password='root', dsn=dsn) # 執(zhí)行查詢 cursor = connection.cursor() query = """ sql語句 """ cursor.execute(query) results = cursor.fetchall() # 打印結(jié)果 for row in results: print(row) # 關(guān)閉游標(biāo)和連接 cursor.close() connection.close()
到此這篇關(guān)于Python連接Oracle的多種方式小結(jié)的文章就介紹到這了,更多相關(guān)Python連接Oracle內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
公眾號接入chatGPT的詳細(xì)教程 附Python源碼
這篇文章主要介紹了公眾號接入chatGPT教程附Python源碼,這里需要大家準(zhǔn)備一個域名,一臺服務(wù)器和一個公眾號,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02在IIS服務(wù)器上以CGI方式運(yùn)行Python腳本的教程
這篇文章主要介紹了在IIS服務(wù)器上以CGI方式運(yùn)行Python腳本的教程,雖然IIS的性能并不理想...需要的朋友可以參考下2015-04-04python實(shí)現(xiàn)CSF地面點(diǎn)濾波算法原理解析
這篇文章主要介紹了python實(shí)現(xiàn)CSF地面點(diǎn)濾波算法原理,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08Python使用Pandas處理測試數(shù)據(jù)的方法
Pandas是一個功能極其強(qiáng)大的數(shù)據(jù)分析庫,可以高效地操作各種數(shù)據(jù)集,這篇文章主要介紹了Python自動化測試-使用Pandas來高效處理測試數(shù)據(jù),需要的朋友可以參考下2023-02-02Python統(tǒng)計(jì)字符串中英文字母、空格、數(shù)字和其它字符的個數(shù)
這篇文章主要給大家介紹了關(guān)于Python統(tǒng)計(jì)字符串中英文字母、空格、數(shù)字和其它字符的個數(shù)的相關(guān)資料,本文實(shí)例講述了python統(tǒng)計(jì)字符串中指定字符出現(xiàn)次數(shù)的方法,需要的朋友可以參考下2023-06-06Python打印詳細(xì)報(bào)錯日志,獲取報(bào)錯信息位置行數(shù)方式
這篇文章主要介紹了Python打印詳細(xì)報(bào)錯日志,獲取報(bào)錯信息位置行數(shù)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09Python中實(shí)現(xiàn)變量賦值傳遞時的引用和拷貝方法
下面小編就為大家分享一篇Python中實(shí)現(xiàn)變量賦值傳遞時的引用和拷貝方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04