Python學(xué)習(xí)之六_同時訪問Oracle和Mysql的方法

2023-05-14 10:12:07       來源:博客園


(相關(guān)資料圖)

Python學(xué)習(xí)之六_同時訪問Oracle和Mysql的方法

背景

jaydebeapi 可以訪問大部分?jǐn)?shù)據(jù)庫. 但是他有一個問題是僅能夠訪問一種類型的數(shù)據(jù)庫.如果同事連接兩種數(shù)據(jù)庫,那么就會出現(xiàn)問題會有如下的提示: TypeError: Class com.mysql.cj.jdbc.Driver is not found網(wǎng)上有方法是修改 jaydebeapi的源碼進(jìn)行完善我這邊想了下感覺有一定的風(fēng)險. 畢竟升級和連續(xù)處理比較麻煩.基于此,我想以O(shè)racle為基準(zhǔn)時, 使用cx-Oracle的方式連接Oracle其他的數(shù)據(jù)庫使用 jaydebeapi的方式進(jìn)行處理.這樣的話可以規(guī)避這個問題. 當(dāng)然規(guī)避的不是非常徹底. 一次只能是一對一,不能一對多.

cx-Oracle的安裝

注意cx-Oracle 需要先安裝module最好也安裝一下 oracle的instant的安裝介質(zhì).需要的其他module也比較多比如 sys, configparser,os等. 

配置文件說明

[cx]ip=10.110.xxx.xxxport=1521uname=somethingpwd=somepasswordtnsname=ora19c

代碼處理 第一部分

import cx_Oracleimport configparserimport osos.environ["path"] = r"D:\work\instantclient_12_2"# 引入必須要的包, 以及os.environ環(huán)境變量設(shè)置# 將oracle的instantclient添加進(jìn)來. 

代碼處理 第二部分

config = configparser.ConfigParser()    config.read("cx.ini", encoding="utf-8")    ip = config.get("cx", "ip")    port = config.get("cx", "port")    uname = config.get("cx", "uname")    pwd = config.get("cx", "pwd")    tnsname = config.get("cx", "tnsname")    dsnStr = cx_Oracle.makedsn(ip, port, service_name=tnsname)    connect_str = "oracle://%s:%s@%s" % (uname, pwd, dsnStr)    conn = cx_Oracle.connect(uname, pwd, dsn=dsnStr)    cur = conn.cursor()    cur.execute(sql)    data = cur.fetchall()    cur.close()    conn.close()

jaydebeapi訪問Mysql的方法-配置文件

[mysql]jdbcString=com.mysql.cj.jdbc.DriverdriverPath=./driver/mysql-connector-java-8.0.23.jarurlString=jdbc:mysql://10.110.xxx.xxx:3306/xxxxuserName=xxxxpassWord=xxxxxxx?!# 需要注意 Mysql5和Mysql8的驅(qū)動類型是不一樣的Mysql5.x: com.mysql.jdbc.DriverMysql8.x:com.mysql.cj.jdbc.Driver

連接代碼

config.read("db.ini",encoding="utf-8")def getconn(dbinfo) :    jdbcString = config.get(dbinfo,"jdbcString")    driverPath = config.get(dbinfo,"driverPath")    urlString = config.get(dbinfo,"urlString")    userName = config.get(dbinfo,"userName")    passWord = config.get(dbinfo,"passWord")    conn = jaydebeapi.connect(jdbcString,urlString,[userName,passWord],driverPath)    return conn引用的代碼為:import dbconnectiondef getdata(sql):    connMysql = dbconnection.getconn("mysql")    curMysql = connMysql.cursor()    curMysql.execute(sql)    data = curMysql.fetchall()    curMysql.close()    return data

其他說明

這種方式下就可以同事打開兩種數(shù)據(jù)庫進(jìn)行查詢和比較了.各種方式其實都有, 感謝原作者提供的各種資料翻閱了很多blog, 不再一一羅列了. 
關(guān)鍵詞:
x 廣告
x 廣告

Copyright @  2015-2022 海外生活網(wǎng)版權(quán)所有  備案號: 滬ICP備2020036824號-21   聯(lián)系郵箱:562 66 29@qq.com