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)