(相關(guān)資料圖)
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 需要先安裝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()
[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, 不再一一羅列了.
Copyright @ 2015-2022 海外生活網(wǎng)版權(quán)所有 備案號: 滬ICP備2020036824號-21 聯(lián)系郵箱:562 66 29@qq.com