首页 > 数据库 >Python学习之六_同时访问Oracle和Mysql的方法

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

时间:2023-05-14 10:22:32浏览次数:41  
标签:get Python mysql 之六 dbinfo cx Mysql Oracle config

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

标签:get,Python,mysql,之六,dbinfo,cx,Mysql,Oracle,config
From: https://www.cnblogs.com/jinanxiaolaohu/p/17398817.html

相关文章

  • Python连接数据库
    使用pymysql库:使用pip进行安装:pipinstallpymysql以下是使用pymysql库连接MySQL数据库的示例代码:importpymysql#连接到MySQL数据库conn=pymysql.connect(host='localhost',user='username',#用户名和密码改为自己的password='password',db='data......
  • Python for loop with index All In One
    PythonforloopwithindexAllInOne带索引的Pythonfor循环error❌#!/usr/bin/python3Blue=17GREEN=27RED=22LEDs=list([RED,GREEN,Blue])forled,iinLEDs:print('led=',LEDs[i])#22,27,17"""Traceback(mo......
  • MySQL学习日志八,自连接
    第一步,在school建立category表CREATETABLE`category`(`categoryid`intNOTNULL,`pid`intDEFAULTNULL,`categoryname`varchar(255)DEFAULTNULL,PRIMARYKEY(`categoryid`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb3顺带填一下数据昂题目:查询对应的子......
  • MySQL连接时报1040 Too many connections
    1发现问题最近使用mysql5.7的时候连接公司系统数据库时发现提示报错,出现mysqltoomanyconnection的异常。经过查询发现是mysql的系统自带的连接数太小,连接的线程超过系统配置导致出现错误。2解决过程2.1首先登录mysql终端,输入showvariableslikemax_connections,查看最大连接......
  • 括号生成--Python解法
    数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。例如n=1,输出:["()"]classSolution:defgenerateParenthesis(self,n:int)->List[str]:res=[]cur_str=''defdfs(cur_str,left,right):......
  • Python 的常见库
    Python是一种广泛使用的编程语言,有很多强大的库可以帮助开发人员实现各种任务。以下是一些常见的Python库:NumPy:一个用于数值计算的库,提供了高效的数组操作和数学函数。Pandas:一个用于数据分析和操作的库,提供了数据结构和函数,可以方便地处理和分析数据。Matplotlib:一个用于数据可视......
  • MySQL学习日志七,联表查询Join ON
    网上找的七种Join查询图片--查询参加考试的同学,包含的信息包括学号,姓名,科目编号,分数/*分析思路1.分析需求,查询的字段涉及到哪些表2.确定要哪些连接查询3.确定交叉点,涉及到的表有哪些相同的字段判断条件:学生表的studentno=成绩表的studentno*/joinon连接查询joinw......
  • 简单的python画图程序
    fromtkinterimport*fromtkinterimportmessageboxfromtkinter.colorchooserimportaskcolorclassApplication(Frame):def__init__(self,master=None):super().__init__(master)self.master=masterself.pack()self.createWid......
  • 爬虫案例之网易有道翻译Python代码改写
    网易有道翻译之逆向破解[Python代码改写]网址:https://fanyi.youdao.com/index.html#/***用到的知识点:(1)requests模块和session模块,发起请求什么是session对象?该对象和requests模块用法几乎一致.对于在请求过程中产生了cookie的请求如果该请求是使用session发起的,则co......
  • python内置string模块
    1内置string长量所有的ASCII字母string.ascii_letters所有的ASCII小写字母string.ascii_lowercase所有的ASCII大写字母string.ascii_uppercase数字0-9string.digits上面的常量输出都是str类型2str.maketrans(x[,y[,z]])和str.translate()maketrans()和translate()......