Python连接信创数据库(金仓、达梦、神通)

1、背景

  • 最近在做一个数据库工具,用于代理执行信创数据库的sql,主要支持达梦、金仓、神通数据库。看了下各数据的官网,如果用他们自身提供的python 驱动依赖,会遇到很多问题,比如要各种配置呀、依赖数据库的安装包呀等等,很复杂。

  • 因此,经过调研发现后,可以换一种方式去处理,引入提供的jar驱动包,达梦、神通都提供有自己的驱动包,金仓可以直接用postgresql驱动包。

2、引入依赖

  • 导入jaydebeapi依赖
 pip3 install jaydebeapi
  • 驱动包下载地址: https://www.alipan.com/s/3bojCLTuxZs

3、代理升级

3.1 神通

import jaydebeapi


class ShenTongConnection:
    def __init__(self, db_host, db_port, db_user, db_password):
        self.host = db_host
        self.port = db_port
        self.dba_user = db_user
        self.dba_password = db_password

    def getConnection(self):
        url = 'jdbc:oscar://{host}:{port}/OSRDB'.replace("{host}", self.host).replace("{port}", str(self.port)).replace(
            "{db}", self.db)
        driver = 'com.oscar.Driver'
        # 驱动所在位置
        jar_file = os.path.join(os.path.dirname(__file__), "init/oscarJDBC.jar")

        conn = jaydebeapi.connect(driver, url, [self.dba_user, self.dba_password], jar_file)
        return conn

if __name__ == '__main__':
    con = ShenTongConnection("host", 'port', "user", "pwd")
    cursor = con.getConnection().cursor()
    sql = 'select * from db.user'
    cursor.execute(sql)
    result = cursor.fetchall()
    for e in result:
        print(e)

3.2 达梦

import jaydebeapi


class DamengConnection:
    def __init__(self, db_host, db_port, db_user, db_password):
        self.host = db_host
        self.port = db_port
        self.dba_user = db_user
        self.dba_password = db_password

    def getConnection(self):
        url = 'jdbc:dm://{host}:{port}'.replace("{host}", self.host).replace("{port}", str(self.port))
        driver = 'dm.jdbc.driver.DmDriver'
        # 驱动所在位置
        jar_file = os.path.join(os.path.dirname(__file__), "init/DmJdbcDriver18.jar")

        conn = jaydebeapi.connect(driver, url, [self.dba_user, self.dba_password], jar_file)
        return conn

if __name__ == '__main__':
    con = DamengConnection("host", 'port', "user", "pwd")
    cursor = con.getConnection().cursor()
    sql = 'select * from db.user'
    cursor.execute(sql)
    result = cursor.fetchall()
    for e in result:
        print(e)

3.3 金仓

import jaydebeapi


class KingConnection:
    def __init__(self, db_host, db_port, db_user, db_password):
        self.host = db_host
        self.port = db_port
        self.dba_user = db_user
        self.dba_password = db_password

    def getConnection(self):
        url = 'jdbc:postgresql://{host}:{port}/kingbase'.replace("{host}", self.host).replace("{port}", str(self.port))
        driver = 'org.postgresql.Driver'
        # 驱动所在位置
        jar_file = os.path.join(os.path.dirname(__file__), "init/postgresql-42.7.1.jar")

        conn = jaydebeapi.connect(driver, url, [self.dba_user, self.dba_password], jar_file)
        return conn


if __name__ == '__main__':
    con = KingConnection("host", 'port', "user", "pwd")
    cursor = con.getConnection().cursor()
    sql = 'select * from db.user'
    cursor.execute(sql)
    result = cursor.fetchall()
    for e in result:
        print(e)
  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值