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 - Production2、下載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 -