【Python】【接口自动化】对数据库的封装

该博客介绍了一个通用的数据库访问类`CommonDB`,支持MySQL、Oracle、DB2和SQLServer。通过实例化`CommonDB`并传入数据库名称和环境,可以方便地执行SQL查询和插入操作。对于Oracle,注意其不支持多条SQL同时执行,而DB2返回的数据需要额外处理。博客还提供了具体的数据库连接配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

只写了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()
   
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值