本文詳細介紹如何使用 Python 的 cx_Oracle 模組連接 Oracle 資料庫,並將所有使用者資料表的資料匯出為獨立的 CSV 檔案。這對於資料備份、遷移或離線分析非常實用。
pip install cx_Oracle 安裝驅動模組import sys
import csv
import cx_Oracle
def export_oracle_to_csv():
# 1. 取得連線字串(格式:user/password@host:port/service_name)
conn_str = input("請輸入 Oracle 連線字串 (uid/pwd@database): ").strip()
if not conn_str:
print("連線字串不可為空")
return
try:
# 2. 建立連線與游標
conn = cx_Oracle.connect(conn_str)
cursor = conn.cursor()
# 3. 查詢所有使用者資料表(排除回收筒物件)
cursor.execute("SELECT table_name FROM user_tables")
tables = [row[0] for row in cursor if not row[0].startswith('BIN$')]
print(f"共發現 {len(tables)} 個資料表,開始匯出...")
# 4. 逐表匯出
for table_name in tables:
csv_filename = f"{table_name}.csv"
with open(csv_filename, 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f, dialect='excel')
# 4.1 寫入欄位標題
col_cursor = conn.cursor()
col_cursor.execute(f"SELECT * FROM {table_name} WHERE ROWNUM = 0") # 僅取結構
headers = [col[0] for col in col_cursor.description]
writer.writerow(headers)
# 4.2 寫入資料列
data_cursor = conn.cursor()
data_cursor.execute(f"SELECT * FROM {table_name}")
for row in data_cursor:
writer.writerow(row)
data_cursor.close()
col_cursor.close()
print(f"✅ {table_name} -> {csv_filename} 匯出完成")
except cx_Oracle.DatabaseError as e:
print(f"資料庫錯誤: {e}")
except Exception as e:
print(f"發生未預期錯誤: {e}")
finally:
if 'conn' in locals() and conn:
conn.close()
print("資料庫連線已關閉")
if __name__ == "__main__":
export_oracle_to_csv()
scott/tiger@localhost:1521/orcl)或 TNS 別名。BIN$ 開頭的表為刪除後暫存物件,無需匯出。newline='' 避免 Windows 下多出空行;encoding='utf-8' 確保中文不亂碼。with open 並顯式關閉游標,防止連線洩漏。cursor.arraysize 批次提取,或使用 Oracle 原生工具(Data Pump、SQLcl)。cx_Oracle 會自動將 DATE、TIMESTAMP、CLOB 等轉為 Python 對應型別,CSV 寫入時會自動轉字串;若需特定格式,可在寫入前自行格式化。此腳本提供一個開箱即用的基礎框架,可依專案需求擴充:支援指定 Schema、並行匯出、壓縮輸出、上傳至雲端儲存等。善用 Python 豐富的生態系,能大幅簡化 Oracle 資料匯出作業。