(相关资料图)
jaydebeapi 可以访问大部分数据库. 但是他有一个问题是仅能够访问一种类型的数据库.如果同事连接两种数据库,那么就会出现问题会有如下的提示: TypeError: Class com.mysql.cj.jdbc.Driver is not found网上有方法是修改 jaydebeapi的源码进行完善我这边想了下感觉有一定的风险. 毕竟升级和连续处理比较麻烦.基于此,我想以Oracle为基准时, 使用cx-Oracle的方式连接Oracle其他的数据库使用 jaydebeapi的方式进行处理.这样的话可以规避这个问题. 当然规避的不是非常彻底. 一次只能是一对一,不能一对多.
注意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()
[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, 不再一一罗列了.
Copyright @ 2015-2022 海外生活网版权所有 备案号: 沪ICP备2020036824号-21 联系邮箱:562 66 29@qq.com