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

python,学习,同时,访问,oracle,mysql,方法 · 浏览次数 : 25

小编点评

**Jaydebeapi连接Oracle和MySQL的方法** **使用cx-Oracle连接Oracle其他数据库** 1. **安装cx-Oracle** - 下载cx-Oracle的最新版本。 - 将文件保存为`cx.jar`。 - 在系统路径中添加`D:\work\instantclient_12_2`目录。 2. **配置cx-Oracle** - 创建`cx.ini`配置文件,并将其保存为`D:\work\instantclient_12_2\cx.ini`中。 - 在配置文件中设置以下参数: - `ip`:Oracle服务器的IP地址。 - `port`:Oracle服务器的端口号。 - `uname`:Oracle用户名。 - `pwd`:Oracle密码。 - `tnsname`:Oracle数据库名称。 3. **创建连接字符串** - 使用`cx_Oracle.makedsn()`函数创建连接字符串。 - 格式:`oracle://%s:%s@%s%s`,其中: - `%s`:IP地址。 - `%s`:端口号。 - `%s`:数据库名称。 4. **打开连接** - 使用`cx_Oracle.connect()`函数打开连接字符串。 5. **执行SQL查询** - 使用`cur.execute()`方法执行 SQL 查询。 6. **关闭连接** - 使用`cur.close()`和`conn.close()`方法关闭连接和数据库连接。 **使用dbconnection连接MySQL数据库** 1. **导入库** - 导入`dbconnection`模块。 2. **获取连接字符串** - 从`db.ini`配置文件中获取`jdbcString`、`driverPath`和`urlString`参数。 - 使用`jaydebeapi.connect()`连接到 MySQL 数据库。 3. **执行SQL查询** - 使用`cur.execute()`方法执行 SQL 查询。 4. **关闭连接** - 使用`cur.close()`和`conn.close()`方法关闭连接和数据库连接。

正文

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学习之六_同时访问Oracle和Mysql的方法相似的内容:

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

Python学习之六_同时访问Oracle和Mysql的方法 背景 jaydebeapi 可以访问大部分数据库. 但是他有一个问题是仅能够访问一种类型的数据库. 如果同事连接两种数据库,那么就会出现问题 会有如下的提示: TypeError: Class com.mysql.cj.jdbc.Driv

Python学习之四_部分battery的学习

Python学习之四_部分battery的学习 CentOS升级pip的方法 yum install python3 之后, 一般centos的版本都很低, 有时候很多module 是无法安装的. 一般可以通过他进行升级: pip3 install -U pip 注意如果无法升级, 可以先这样处理

Python学习之五_字符串处理生成查询SQL

Python学习之五_字符串处理生成查询SQL 前言 昨天想给同事讲解一下获取查询部分表核心列信息的SQL方法 也写好了一个简单文档. 但是感觉不是很优雅. 最近两三天晚上一直在学习Python. 想将昨天的文档处理成一个工具的方式. 将查询SQL展示出来. 然后再由同事手工检查确认. 增加时间范围

Python学习之七_input和print

Python学习之七_input和print 摘要 python3 之后 函数必须带 () 了 因为我开始学习的比较晚, 所以准备Python3开始学起 前面主要是模仿别人的代码进行学习 后续慢慢学习 使用python调用ebpf等内容. 这里简单先总结一下input和print的函数. 作为一个学

Python学习之八_调用Outlook发送邮件以及调用远程windows上面的python

Python学习之八_调用Outlook发送邮件以及调用远程windows上面的python 摘要 之前只有一个需求是发送加密邮件. 之前一直是使用linux进行发送.但是总是无法发送加密邮件. 最近学习python, 发现可以使用 python来调用outlook来发送邮件. 这样就比较简单了.

Python学习之九_winrm执行远程机器的cmd命令

Python学习之九_winrm执行远程机器的cmd命令 winrm # 注意如下命令需要按照顺序执行. # 打开powershell的管理员模式进行如下的操作. set-executionpolicy remotesigned winrm quickconfig winrm set winrm/c

Python学习之十_paramiko的简单学习

Python学习之十_paramiko的简单学习 简介 pywinrm 是python用于连接访问windows的工具 paramiko 是python用于连接访问linux的工具 ansible等工具很多也是基于类似的组件进行的处理 连接不同的系统进行命令行的操作. paramiko的简介 par

Python学习之十一_Windows获取硬件信息

Python学习之十一_Windows获取硬件信息 简介 网上找了一些方法简单整理了下,可以快速获取部分信息 包含机器名称等. 以及序列号相关 部分学习来源: https://blog.51cto.com/u_15354476/5339864 源码 import psutil import wmi

Python学习之十三_pip的学习

Python学习之十三_pip的学习 pip的含义 pip: pip is the package installer for Python. You can use pip to install packages from the Python Package Index and other in

Python学习之十八_获取神通数据库所有的表数据量

# Python学习之十八_获取神通数据库所有的表数据量 ## 背景 ``` 今天想获取一下所有数据库的表信息.但是发现神通数据库的系统表里面的表信息不正确 无法获取实际意义的表信息. 联系了下神通数据库的原厂高手. 给了一个存储过程可以进行相关的处理. 因为最近学习python(放下一周就忘记的七