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

Posted 济南小老虎

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.xxx
port=1521
uname=something
pwd=somepassword
tnsname=ora19c

代码处理 第一部分

import cx_Oracle
import configparser
import os
os.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.Driver
driverPath=./driver/mysql-connector-java-8.0.23.jar
urlString=jdbc:mysql://10.110.xxx.xxx:3306/xxxx
userName=xxxx
passWord=xxxxxxx?!

# 需要注意 Mysql5和Mysql8的驱动类型是不一样的
Mysql5.x: com.mysql.jdbc.Driver
Mysql8.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 dbconnection

def getdata(sql):
    connMysql = dbconnection.getconn(\'mysql\')
    curMysql = connMysql.cursor()
    curMysql.execute(sql)
    data = curMysql.fetchall()
    curMysql.close()
    return data

其他说明

这种方式下就可以同事打开两种数据库进行查询和比较了.
各种方式其实都有, 感谢原作者提供的各种资料
翻阅了很多blog, 不再一一罗列了. 

Python 学习之《Learn Python3 The Hard Way 》第六部分学习笔记

以上是关于Python学习之六_同时访问Oracle和Mysql的方法的主要内容,如果未能解决你的问题,请参考以下文章

javascript设计模式学习之六——代理模式

python学习之第十六课时--缩进(indentation)

python学习之第十六课时--函数的作用及定义

python学习之第六课时--基本数据类型(数字int字符串str)

Python学习之标识符

#yyds干货盘点#jackson学习之六:常用类注解