最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

Python学习之六_同时访问Oracle和Mysql的方法

来源:博客园


(资料图片)

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, 不再一一罗列了. 

关键词: