人大金仓(KingbaseES V9)提供了Python的驱动,可以通过Python来访问人大金仓数据库,不过这个配置并不算十分友好。
要使用这个Python驱动,除了要根据架构来下载对应的版本之外,还需要从KingbaseES的部署中拷贝一些lib文件出来。为了简化这些操作,我写一个脚本对自动化整个过程,并且把相关的文件都放在ksycopg2/一个目录下,这个脚本如下(download_psycopg2.sh)
#!/bin/bash# 可以传一个路径前缀if [ ! -d $1 ]; thenmkdir -p $1cd $1fi# 根据版本下载对应的文件ARCH=x86_64VERSION=v9r1NAME=ksycopg2if [ "$ARCH" == "x86_64" ]; thenARCH_PART='x86'elseARCH_PART=${ARCH}fiFILENAME=${VERSION}_${NAME}_${ARCH}.tar.gzURL=https://kingbase.oss-cn-beijing.aliyuncs.com/KES_INTERFACE/V9/python/${NAME}/${ARCH_PART}/${FILENAME}wget ${URL}# 解压TAR_NAME=`tar vxf ${FILENAME} | grep 3.5 | head -1 | cut -f1 -d"/"`echo ${TAR_NAME}tar vxf ${TAR_NAME}DIR_NAME=ksycopg2# 从kingbase的docker容器中拷贝相关文件, 设置软链CONTAINER_NAME=kingbasesudo docker cp ${CONTAINER_NAME}:/home/kingbase/install/kingbase/lib/libkci.so.5 ${DIR_NAME}/sudo docker cp${CONTAINER_NAME}:/home/kingbase/install/kingbase/lib/libkci.so.5.12 ${DIR_NAME}/cd ${DIR_NAME}ln -s _ksycopg.cpython-35m-x86_64-linux-gnu.so _ksycopg.so
执行./download_psycopg2.sh [TARGET_DIR]
就可以把需要的Python驱动放到目标目录中(注意会建一个子目录psycopg2/)。
接下来,可以把ksycopg2拷贝到实际项目的ksycopg2/目录下,通过如下的方式来import,可以避免在shell中每次设置LD_LIBRARY_PATH环境变量。
import ctypesctypes.CDLL(f'ksycopg2/libkci.so.5')import ksycopg2
这样人大金仓的Python环境就算是弄好了。
接下来我们就首先连接数据库了,比如
conn = ksycopg2.connect(database='kingbase',user='<username>',password='<password>',host='127.0.0.1',port=54321)