Python學習之六_同時訪問Oracle和Mysql的方法

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


        (相關資料圖)

        Python學習之六_同時訪問Oracle和Mysql的方法

        背景

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

        cx-Oracle的安裝

        注意cx-Oracle 需要先安裝module最好也安裝一下 oracle的instant的安裝介質.需要的其他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環境變量設置# 將oracle的instantclient添加進來. 

        代碼處理 第二部分

        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的驅動類型是不一樣的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

        其他說明

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

        Copyright @  2015-2022 海外生活網版權所有  備案號: 滬ICP備2020036824號-21   聯系郵箱:562 66 29@qq.com