Python連接oracle資料庫實踐

2022-01-04 糙科技

文章:Python數據分析實例最近需要將一批數據從Oracle資料庫導出為csv文件,打算用Python來實現,Python連接Oracle資料庫比其他資料庫稍微複雜一點。
本文分享這次連接實踐,使用Python來操作Oracle資料庫的關鍵點總結如下。cx_Oracle是一個Python 擴展模塊,相當於python的Oracle資料庫的驅動,通過使用所有資料庫訪問模塊通用的資料庫 API來實現 Oracle 資料庫的查詢和更新。方法一:官方網站下載安裝https://pypi.org/project/cx-Oracle/
方法二:通過pip安裝
pip install cx_oracle -i https://pypi.douban.com/simple 


1、首先查看資料庫版本,通過如下sql查看版本信息:
select * from v$version

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
"CORE 11.2.0.1.0 Production"
TNS for 64-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

2、下載Oracle資料庫對應的客戶端https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html我的資料庫版本是:11.2.0.1.0,選擇了最接近的11.2.0.4.0,所以我下載的客戶端版本為instantclient-basic-windows.x64-11.2.0.4.0.zip3、然後解壓,並將解壓後的地址信息加入到作業系統環境變量中E:\Oracle11g\product\11.2.0\instantclient_11_24、將文件中後綴為 dll 的文件複製到 anaconda 安裝位置,同上添加在path這個變量下。通過以上步驟,Oracle客戶端配置完成
1、創建tnsnames.ora文件通過遠程服務,進入資料庫部署伺服器端,進入如下目錄,並創建tnsnames.ora文件。如果沒有可以手動創建(我是之前安裝過完整版客戶端,所以已經有了,一般都有配置過,只需要打開文件獲取關鍵信息如host、port、service_name即可)D:\app\myUserName\product\11.2.0\dbhome_1\NETWORK\ADMIN2、配置資料庫信息tnsnames.ora Network Configuration File(TNS配置),格式如下: 
ORCL =   (DESCRIPTION =     (ADDRESS = (PROTOCOL = TCP)(HOST = host)(PORT = 1521))     (CONNECT_DATA =       (SERVER = DEDICATED)       (SERVICE_NAME = orcl)      )   )

host就是你的資料庫ip地址,PORT就是資料庫埠,SERVICE_NAME是創建資料庫的時候設置。很多人在進行以上步驟都遇到了很多問題,比如報錯信息如下:
cx_Oracle.DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded:  "libclntsh.so: cannot open shared object file: No such file or directory". See https://oracle.github.io/odpi/doc/installation.html

解決思路:查詢python版本和Oracle資料庫客戶端版本是否一致;在python安裝根目錄下複製Oracle配置的dll文件。
sqlalchemy.exc.DatabaseError: (cx_Oracle.DatabaseError) ORA-12505: TNS: 監聽程序當前無法識別連接描述符中所給出的 SID

解決思路:cx_Oracle默認的連接串只能連接到實例名,而不能連接到service_name,實例名和service_name有時候配置不一樣,所以oracle用service_name去匹配實例名,可能找不到。所以連接時必須指定連的是service_name,查閱配置的tnsname.ora文件,找到service_name即可。
from sqlalchemy import create_engineimport pandas as pd
import osos.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'engine = create_engine('oracle+cx_oracle://username:password@ip:1521/ORCL')

sql='select * from b_build_info'

df = pd.read_sql_query(sql, engine)df1=pd.DataFrame(df)
print(df1)
engine.close()

engine=cx_Oracle.connect('username','password','ip:1521/ORCL')
execsql=engine.cursor()
sql='select * from b_build_info'
execsql.execute(sql)

result=execsql.fetchall()titles = cursor.description
print (pd.DataFrame(result))
execsql.close()engine.close()

- 合作、交流、轉載請添加微信 moonhmily1 -

相關焦點

  • python連接mysql,teradata,DB2資料庫
    python語言靈活,短小精悍。資料庫是保存數據的重要載體,但結構化查詢語言SQL,表達能力較弱。
  • 每天一分鐘,python一點通(Python 連接資料庫mysql)
    mysql資料庫每天一分鐘,python一點通(workbench new table),且建立了一個資料庫表,該如何操作資料庫?  Python 連接資料庫mysql  在操作mysql資料庫前,請先安裝pymysql(pip install pymysql)  import pymysql.cursorsMYSQL_HOSTS='localhost' # 本地資料庫,若是伺服器上的資料庫,請輸入伺服器IPMYSQL_USER
  • Oracle資料庫常用命令整理
    收錄於話題 #資料庫oracle查看用戶狀態select username,account_status from dba_users;查看所有角色
  • Python數據科學實踐 | 資料庫1
    大家好,基於Python的數據科學實踐課程又到來了,大家盡情學習吧。本期內容主要由智億同學與政委聯合推出。資料庫永遠是數據管理上最值得使用的工具。而把所收集的大量數據放入資料庫之後再處理是數據科學實踐項目中必不可少的一步。
  • 分享一個有意思的oracle19c資料庫監聽異常
    來自:波波說運維概述今天主要分享一個最近排查的監聽問題,還是有點意思的,一起來看看吧~環境:oracle19c 單實例用plsql連接提示,這裡排除防火牆、帳號密碼問題,連接字符串按監聽文件格式寫2、查看資料庫狀態資料庫狀態正常
  • Oracle資料庫參數優化參考
    下面為一些參數調優參考:一、db_file_multiblock_read_count:oracle讀取數據有兩種方式:1)通過rowid(即索引掃描)2)通過全表掃描如果是全表掃描時,oracle會一次讀取多個blocks,每次讀取的塊數將受初始化參數db_file_multiblock_read_count和作業系統的
  • 用Python連接4個常用資料庫的URL寫法,你掌握了嗎?
    前言用過Python的童鞋,應該會接觸到用Python連接資料庫,但是每種資料庫的連接URL,你是否會編寫?這裡用SQLAlchemy庫為大家總結一下,方便大家查閱。什麼是SQLAlchemy?SQLAlchemy 是一個使用 Python 實現的 ORM 框架,它的設計理念是:SQL 資料庫的量 級和性能比對象集合重要,對象集合的抽象比表和行重要;它採用了類似於 Java 裡 Hibernate 的數據映射模型;它的目標是提供能兼容眾多資料庫(如:SQLite、MySQL、Postgres、Oracle、MS-SQL、SQLServer 和 Firebird
  • Oracle 資料庫遷移-百家號 - 百度經驗
    Oracle 資料庫遷移需求分析:資料庫所有文件(數據文件、日誌文件、臨時文件、控制文件)都存放在光纖存儲中,但是光纖存儲使用時間過長,超過3年,經常出現一些問題,而且光纖存儲需要廠家維護,維護方面不是很方便,需要將資料庫文件遷移到nas存儲中。
  • oracle資料庫多表查詢連接
    多表查詢連接一、 多表查詢外連接的方式:(+) 號 外連接Inner join 內連接Left outer join --outer 可以省略,而左條件所在的表除了匹配相等連接條件外,還可以顯示無法匹配連接條件的數據!
  • python是如何來連接mysql的
    就像Java連MySQL使用jdbc驅動器一樣,python的標準數據接口Python DB-API為開發人員提供了資料庫應用編程接口,可以支持很多種資料庫,今天我們以mysql為例來介紹python如何操作資料庫。
  • Flink CDC 系列 - 實時抽取 Oracle 數據,排雷和調優實踐
    從 Oracle 8i 開始,Oracle 已經引入了 Service Name 的概念以支持資料庫的集群 (RAC) 部署,一個 Service Name 可作為一個資料庫的邏輯概念,統一對該資料庫不同的 SID 實例的連接。
  • Oracle資料庫DB相關職位火速熱招中
    資料庫,有OCP或OCM認證優先。【職位聯繫人】gang.shi@oracle.com 【職位名稱】Technical Analyst 3-Database Support 【職位地點】大連【職位描述】5年以上DBA或資料庫開發或產品技術支持相關工作做經驗。精通oracle資料庫,有OCP或OCM認證優先。
  • Python 操作MySQL資料庫
    安裝python即pycharm環境。mysqlclient-1.3.12-cp36-cp36m-win_amd64.whl安裝命令:pipinstall mysqlclient-1.3.12-cp36-cp36m-win_amd64.whl 第三步:python
  • Python連接MySQL資料庫方法介紹(超詳細!手把手項目案例操作)
    >Python 3.7.2pip 19.0.3兩種方法進行資料庫的連接分別是PyMySQL和mysql.connector步驟:連接資料庫首先我們的MySQL資料庫已安裝,且已建好名為test的資料庫,其中有名為student的表import pymysql#連接資料庫conn=pymysql.connect(host = '127.0.0.1' # 連接名稱,默認127.0.0.1
  • 零基礎學Oracle之1:Oracle體系架構
    3) 客戶和伺服器進程:主要是用於連接用戶客戶端運行類似於sql*plus伺服器進程:當客戶連接伺服器時創建,一般時一個用戶進程對應一個伺服器進程,但當使用share server時例外,伺服器進程接收用戶的sql命令跟instance通信
  • 甲骨文免費開放Oracle自治資料庫和Oracle雲基礎設施線上課程及認證
    甲骨文公司近日免費開放了有關Oracle自治資料庫和Oracle 雲基礎設施的線上課程及認證。從2020年3月30日到5月15日,任何用戶都可以登錄甲骨文大學,免費訪問超過50個小時的在線培訓,參加認證考試並獲得6項免費的認證。
  • 如何將Oracle遷移至mysql?
    1)下載Navicat Premium版本,Navicat for mysql只支持連接mysql資料庫。如果需要支持oracle連接,還需要配置OCI,選擇工具—選項—OCI,選擇對應路徑下文件:配置完成後關閉Navicat再重新打開。
  • oracle認證培訓脫產班
    Oracle Database 12c的Oracle認證專家(OCP)基於Oracle Database 12c OCA認證的能力,包括頂級資料庫管理員所需的高級知識和技能,包括備份,恢復和雲計算策略的開發和部署。參加Oracle OCP認證培訓的基礎條件: 零基礎入門,只要您愛好網絡、資料庫。了解基本的資料庫知識即可參加培訓。術業有專攻。
  • MySQL、SqlServer、Oracle 三種資料庫的優缺點總結?
    一、MySQL二、SqlServer三、Oracle一、MySQL優點:體積小、速度快、總體擁有成本低,開源;支持多種作業系統;是開源資料庫,提供的接口支持多種語言連接操作 ;MySQL的核心程序採用完全的多線程編程。線程是輕量級的進程,它可以靈活地為用戶提供服務,而不過多的系統資源。
  • 如何創建Django應用並連接資料庫
    在本文中,你將學習如何建立與MySQL資料庫連接的網站項目,使用django-admin創建此項目,並安裝和創建MySQL資料庫,然後將項目與資料庫連接。先決條件在學習本文內容之前,應該先完成以下步驟:在Ubuntu 16.04伺服器上安裝Django。