Python連接Oracle的多種方式小結(jié)
前言
| 庫/包 | 描述 | 優(yōu)點 | 缺點 | 使用場景 |
|---|---|---|---|---|
| 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
推薦使用這個包,寫的比較詳細:Python中SQLAlchemy庫的使用方法分析_python_腳本之家 (jb51.net)
2. oracledb
官方提供的 Python 客戶端庫,用于連接和操作 Oracle 數(shù)據(jù)庫
是 cx_Oracle 的繼任者,并在很多方面進行了改進和優(yōu)化
安裝與配置:
pip install oracledbOracle 客戶端:需要 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)
- 游標與連接管理:
關(guān)閉游標和連接:在完成數(shù)據(jù)庫操作后,需要關(guān)閉游標和連接以釋放資源
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)建一個游標
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)閉游標和連接
cursor.close()
connection.close()
3. cx_Oracle
Python 中連接 Oracle 數(shù)據(jù)庫的官方庫
支持多種 Oracle 數(shù)據(jù)庫功能,并且是 Oracle 官方推薦的客戶端庫之一
和上面同理,配置一個客戶端,講講差異之處
| 特性 | 優(yōu)點 | 缺點 |
|---|---|---|
| 性能 | 高性能,支持大數(shù)據(jù)量處理和高并發(fā)操作 | - |
| 功能 | 支持復(fù)雜的數(shù)據(jù)庫功能,如綁定變量、批量操作、PL/SQL 存儲過程 | - |
| 官方支持 | 由 Oracle 官方提供和維護,確保兼容性和穩(wěn)定性 | - |
| 配置復(fù)雜性 | - | 配置 Oracle 客戶端和庫可能較為復(fù)雜 |
| 庫更新頻率 | - | 版本更新可能較慢,需關(guān)注新版本的兼容性 |
| 資源管理 | - | 需要手動管理連接和游標,資源管理較為繁瑣 |
| 多線程支持 | 具有良好的多線程支持,可以在多線程環(huá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)閉游標和連接
cursor.close()
connection.close()
到此這篇關(guān)于Python連接Oracle的多種方式小結(jié)的文章就介紹到這了,更多相關(guān)Python連接Oracle內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python簡繁體轉(zhuǎn)換的簡單實現(xiàn)步驟
工作中需要將繁體中文轉(zhuǎn)換成簡體中文上網(wǎng)找了些資料,下面這篇文章主要給大家介紹了關(guān)于Python實現(xiàn)簡繁體轉(zhuǎn)換的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-06-06
Python中super().__init__()測試以及理解
__init__()一般用來創(chuàng)建對象的實例變量,或一次性操作,super()用于調(diào)用父類的方法,可用來解決多重繼承問題,下面這篇文章主要給大家介紹了關(guān)于Python中super().__init__()測試及理解的相關(guān)資料,需要的朋友可以參考下2021-12-12
Python使用SQLAlchemy ORM實現(xiàn)數(shù)據(jù)庫操作指南
SQLAlchemy是Python中最流行的ORM(對象關(guān)系映射)框架之一,它提供了高效且靈活的數(shù)據(jù)庫操作方式,本文將介紹如何使用SQLAlchemy ORM進行數(shù)據(jù)庫操作,感興趣的小伙伴可以了解下2026-01-01
python TK庫簡單應(yīng)用(實時顯示子進程輸出)
這篇文章主要介紹了python TK庫簡單應(yīng)用(實時顯示子進程輸出),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
Python實現(xiàn)簡單求解給定整數(shù)的質(zhì)因數(shù)算法示例
這篇文章主要介紹了Python實現(xiàn)簡單求解給定整數(shù)的質(zhì)因數(shù)算法,結(jié)合實例形式分析了Python正整數(shù)分解質(zhì)因數(shù)的相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
python2 與 pyhton3的輸入語句寫法小結(jié)
這篇文章主要給大家介紹了關(guān)于python2 與 pyhton3的輸入語句寫法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09

