Python 連線 Oracle ERP 資料庫教學
本教學將帶你一步步使用 Python 連線 Oracle ERP 資料庫,從環境準備到實作完整程式碼,一次到位!連線的程式碼不複雜,但我某一個資料庫卻一直連線失敗,花了一周時間各種排查連線失敗的問題,最後發現問題是在 Oracle Instant Client 版本!
確認Oracle版本
可以使用任何 Oracle 連線工具,例如 SQL*Plus、PL/SQL Developer,或是其他資料庫管理工具來查詢目前電腦中 Oracle 資料庫版本的資訊。
1 | SELECT * FROM v$version; |
執行後,你會看到類似以下的輸出結果:
1 | BANNER |
在 BANNER 欄位中,可以看到 Oracle 資料庫的詳細版本資訊,我電腦上的版本是 11.2.0.4.0,所以下一步要下載相對應的 Oracle Instant Client 版本。
下載Client
- 官方下載頁面: Oracle Instant Client Downloads
- 選擇對應作業系統版本(我是 Windows x64): Oracle Instant Client Downloads for Microsoft Windows (x64) 64-bit
- 找到 Version 11.2.0.4.0
- 下載兩個套件
- Instant Client Package - Basic
- Instant Client Package - SQL*Plus
- 解壓縮資料夾
- 將2個資料夾中的所有檔案合併到同一個目錄下
C:\oracle\instantclient_11_2
目錄結構應如下:
1 | C:\oracle\ |
若資料庫版本為 11.2.0.4.0,Client 版本也使用相同版本。
安裝套件
1 | pip install oracledb pyyaml sqlalchemy |
1 | import oracledb |
套件名稱 | 用途 |
---|---|
oracledb | 連線 Oracle 資料庫的核心驅動程式 |
pyyaml | 使用 YAML 檔案來儲存資料庫的敏感資訊 |
sqlalchemy | SQL ORM 來建立資料庫連線 |
設定連線帳密
為了安全地管理資料庫連線資訊,我建立了 credentials.yml
,將帳號、密碼、主機等敏感資訊儲存在這檔案中,而不是直接寫在 Python 程式碼裡。
請將 your_db_username
, your_db_password
, your_db_host
, your_db_service_name
替換成你實際的資料庫連線資訊。請務必妥善保管 credentials.yml 檔案,避免洩露敏感資訊。通常會將此檔案加入 .gitignore
,防止被提交到版本控制系統。
1 | database: |
完整程式碼
我們將整合以上步驟,撰寫完整的 Python 程式碼來連線 Oracle ERP 資料庫。
1 | import oracledb |
執行 Python 程式碼,如果一切順利,你應該會看到✅ 成功連線至資料庫!
的訊息。
處理錯誤訊息
錯誤訊息 | 解決方法 |
---|---|
ORA-12699: Native service internal error occurred. |
將 Oracle Instant Client 版本換成 11.2.0.4.0。 |
ORA-12505: Cannot connect to database. SID ERPDB is not registered with the listener at host... |
表示 Listener 上沒有SID 為 ERPDB,改用 service_name="ERPDB" 。 |
ORA-00911: invalid character |
在 Python 執行 SQL 時,不需要結尾帶分號。 |
DPY-3010: connections to this database server version are not supported by python-oracledb in thin mode |
Oracle 版本是 11 或更舊,必須使用 Thick Mode,需要使用 Oracle Instant Client。若是 12 或更新,則可以使用 Thin Mode,就不需要使用 Oracle Instant Client。 |
UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy. |
使用 SQLAlchemy 建立資料庫連線,可也可忽略該警告,大部分情況下功能是正常的。 |
總結
恭喜你成功完成使用 Python 連線至 Oracle ERP 資料庫的過程!透過本篇文章的教學,相信你已經掌握了基本的連線方式,並能夠順利存取與操作資料庫中的資料,接下來就可以開始進行更進一步的資料處理與應用。如果在實作過程中遇到任何問題,歡迎隨時留言討論,我會盡力協助你解決問題!