DBeaver连接国产数据库OceanBase,以及Python连接,解决ModuleNotFoundError: No module named '_jpype'

发布时间 2023-09-15 16:21:09作者: 努力工作,早日退休

DBeaver连接OceanBase

参考:https://www.modb.pro/db/365929

用户名的格式为: 数据库用户名@租户名#集群名

 

Python连接OceanBase

参考:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000033288

pip3 install JayDeBeApi

会自动下载JayDeBeApi和JPype1两个包,其中JPype1是根据当前环境的Python版本自动匹配的,如下图下载的JPype1-1.4.1-cp311-cp311-win_amd64.whl,是Python3.11版本的

Python版本和JPype1包的版本必须对应起来,不能通过pip安装不同版本的JPype1包,比如下面:

卸载了JPype1,Python3.11.5安装3.9的包失败

如果用拷贝的方法,把3.11的JPype1拷贝到3.9的site-packages目录下,会导致Python3.9 import _jpype模块找不到,如图:

ModuleNotFoundError: No module named '_jpype'

离线安装方法:

  在官网下载对应版本包:https://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype

  比如本机的Python版本是3.9,就下载如下的cp39版本

  

  复制安装包到:Python安装目录\Lib\site-packages目录下

  在Windows命令行模式下在线安装wheel,即 pip install wheel

  安装完wheel后,再安装JPype1-0.6.3-cp37-cp37m-win_amd64.whl 安装包(注意要加上路径)

  

 

Python连接代码

参考:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000033288

import jaydebeapi
def ob_test():
    url = 'jdbc:oceanbase://**.*.**.**:****/***'
    user = '**@**#**'  # 用户@租户#集群名称
    password = '******'
    driver = 'com.alipay.oceanbase.jdbc.Driver'  # 类路径,无需更改
    jarFile = 'oceanbase-client-1.1.7.jar'  # jar文件和py文件在同一个文件夹下,这里需要用相对路径,绝对路径找不到
    
    conn = jaydebeapi.connect(driver, url, [user, password], jarFile)
    cur = conn.cursor()
    
    # 查询 cities 表中的所有数据
    sql = "select * from table"
    cur.execute(sql)
    ans = cur.fetchall()
    print(ans)
    
    cur.close()
    conn.close()