人大金仓(KingbaseES V9)提供了Python的驱动,可以通过Python来访问人大金仓数据库,不过这个配置并不算十分友好。
要使用这个Python驱动,除了要根据架构来下载对应的版本之外,还需要从KingbaseES的部署中拷贝一些lib文件出来。为了简化这些操作,我写一个脚本对自动化整个过程,并且把相关的文件都放在ksycopg2/一个目录下,这个脚本如下(download_psycopg2.sh)
#!/bin/bash
# 可以传一个路径前缀
if [ ! -d $1 ]; then
mkdir -p $1
cd $1
fi
# 根据版本下载对应的文件
ARCH=x86_64
VERSION=v9r1
NAME=ksycopg2
if [ "$ARCH" == "x86_64" ]; then
ARCH_PART='x86'
else
ARCH_PART=${ARCH}
fi
FILENAME=${VERSION}_${NAME}_${ARCH}.tar.gz
URL=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=kingbase
sudo 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 ctypes
ctypes.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)