只写了mysql、oracle、db2、sqlServer的
其他sql数据库和nosql数据库,也都可以扩展进来
依照最后面的样例配置数据库连接信息
通过传入数据库名称和环境连接数据库,各类数据库都相同的方法进行调用
db = CommonDB(‘A系统1库’,env=‘st’)
sql = " insert xxx xxx "
db.exec(sql)
sql = “select xxxxxxxx”
data = db.query(sql,resType=‘dict’)
print(data)
- 其他说明
oracle貌似是没法一次执行多条sql的,可以在oracle的exec方法里处理下sql
db2没写返回list[tuple]结构数据的处理,可以pandas转DataFrame处理掉key为数值的列,再转list
import cx_Oracle
import pymysql
import ibm_db
import pymssql
import pandas as pd
from .configs import dbInfos
class CommonDB():
session = None
lst_resType = None
def __init__(self,dbNm,env='st'):
# 获取连接信息
self.dbNm = dbNm
self.env = env
self.dbInfo = dbInfos.get(dbNm).get(env)
if not self.dbInfo:
raise Exception('该数据库信息不存在,请更新数据库连接配置信息')
dbType = dbInfos.get(dbNm).get('dbType')
if not dbType:
raise Exception('未配置数据库类型信息')
self.dbType = dbType.lower()
if self.dbType == 'ora':
self.dbType = 'oracle'
elif self.dbType.replace(' ', '') == 'sqlserver':
self.dbType = 'mssql'
def connect(self,resType='dict'):
# 根据dbType实例化对应数据库类,并进行连接
self.session = eval(self.dbType+'(self.dbInfo)')
self.session.connect(resType)
print(f'已连接数据库{
self.dbNm,self.env}')
def reconnect(self,resType='dict'):
self.close()
self.connect(resType)
def query(self,sql,resType='dict'):
# 如果已连接数据库就不再次连接
if not self.session:
self.connect(resType)
# 这个用不着,正常是都会要dict数据,不会一次要dict一次要tuple
if self.lst_resType is not None and self.lst_resType != resType:
self.reconnect(resType)
self.lst_resType = resType
return self.session.query(sql)
def exec(self,sql):
if not self.session:
self.connect()
self.session.exec(sql)
def close(self):
self.session.close()