引言
在国产数据库蓬勃发展的今天,KingbaseES作为国产数据库的佼佼者,凭借其高兼容性、高性能和高安全性,在金融、政府、能源等关键领域得到了广泛应用。本文将介绍如何通过Python的ksycopg2驱动连接并操作Kingbase数据库,从基础连接到高级操作全面掌握这一技术栈。
KingbaseES 数据库【系列篇章】:
一、ksycopg2驱动:连接Kingbase的桥梁
1.1 驱动架构深度剖析
ksycopg2 是 Python 编程语言的 KingbaseES 数据库适配器。
在Kingbase场景下展现出完美的兼容性。其底层采用C扩展实现,通过libpq库与数据库进行通信。该驱动完整实现了DB API 2.0规范,支持线程安全、异步通信、二进制协议传输等高级特性。
1.2 ksycopg2兼容Python版本信息
数据库版本包默认支持 Python 2.7 和 Python 3.5 的 64 位 ksycopg2 驱动,如需其他版本,可在官网下载(点击进入)的接口模块中获取更多版本支持。
驱动支持 Python 2.7 及 Python 3.5 至 3.10 版本,具体兼容性如下表所示:

1.3 环境配置要求
-
安装与驱动对应版本的数据库,且数据库连接可用
-
确保 Ksycopg2 支持开发环境:
Linux :x86_64、arm、loongarch、mips、sw
Windows:提供64位支持 -
编译器:
Linux :仅支持依赖 glibc 的编译的 Python。
Windows:依赖 msvc120 的运行时库。 -
Python 环境:
见目录1.2中的版本兼容表
满足以上条件后,可通过已发布版本的数据库安装包、官网下载接口、或联系技服人员获取对应版本架构的 Ksycopg2 驱动
官网下载接口路径(点击进入)展示:
- 选择接口驱动
- 版本列表选取对应的版本文件
二、安装部署驱动
检测系统架构及 Python 版本信息,选择适配的 Ksycopg2 数据库驱动
查看 Python 版本
bash
$ python -V
Python 3.5.6
当前环境使用的是 Python3.5,若对应架构是 x86_64,则应该选用 x86 架构的 Python3.5 版本的 Ksycopg2 驱动包安装
解压适用于对应架构和 Python 版本的 Ksycopg2 驱动包后,Linux 环境下 Python 3.5 版本的驱动目录结构如下:

_ksycopg 开头的这个库就是 Python 驱动,后缀为 .py 的文件是 Ksycopg2 驱动提供的可拓展的 Python 文件,包括了一些游标工厂、批量执行、连接池等功能。
将 ksycopg2 这个文件夹拷贝到对应 Python 安装目录下的 site-packages 路径下(site-packages 路径是 Python 默认加载模块的搜索路径),以下是模块路径示例:

安装完成后,在Python命令行中执行import psycopg2命令,检查是否出现错误提示。
在确认驱动包使用无误的前提,若导入模块仍然报错
错误信息:
text
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/python/py-3.5/lib/python3.5/site-packages/ksycopg2/__init__.py", line 51, in <module>
from ksycopg2._ksycopg import ( # noqa
ImportError: libkci.so.5: cannot open shared object file: No such file or directory
原因:这是因为 Ksycopg2 驱动以动态库形式存在,且依赖 Libkci 库。当 Python 加载 Ksycopg2 时,只能识别到主库本身,而未能检测到其依赖库,因此产生了错误提示
解决:建议通过配置环境变量 LD_LIBRARY_PATH 来设置 Linux 系统的默认库搜索路径。该路径可指定 Psycopg2 驱动包自带的依赖库,若无依赖库也可配置其他任意依赖库路径
配置(Ksycopg2 驱动包内一般会提供依赖库):
text
export LD_LIBRARY_PATH=/home/python/py-3.5/lib/python3.5/site-packages/ksycopg2:$LD_LIBRARY_PATH
在Windows环境下,系统通常会自动识别site-packages/ksycopg2目录中的依赖库,无需额外配置环境变量。但需要注意的是,必须安装MSVC120(VS2013)运行时库,否则将无法加载驱动程序
无报错的话,表示 Ksycopg2 驱动成功导入
三、程序源码开发
3.1 创建文件夹
创建测试程序文件夹 test_ksycopg2,新建源码文件 test_ksycopg2.py,目录示例如下:
test_ksycopg2
└── test_ksycopg2.py
3.2 开发源程序 test_ksycopg2.py
导入Ksycopg2
python
import ksycopg2
使用 ksycopg2.connect() 创建连接,并连接到数据库:
python
conn = ksycopg2.connect("dbname=dbname user=user password=pwd host=host port=port")
例:
conn = ksycopg2.connect("dbname=test user=system password=123456 host=127.0.0.1 port=54321")
创建连接后,使用刚刚创建的连接新建一个 Cursor 对象,用于操作数据库:
python
cur = conn.cursor()
使用 cur.execute() 执行 SQL 语句:
python
# 创建新表
cur.execute('drop table if exists test_ksy')
cur.execute('create table test_ksy(id integer, name TEXT)')
# 插入数据
cur.execute("insert into test_ksy values(%s, %s)", (1, "John"))
cur.execute("insert into test_ksy values(%s, %s)", (2, '中文测试文字'))
cur.execute("insert into test_ksy values(%s, %s)", (3, '!@#¥%......'))
插入成功后,使用 cur.execute() 执行查询,接着使用 cur.fetchall() 获取结果集并打印:
python
# 执行查询,并获取结果集
cur.execute("select * from test_ksy")
rows = cur.fetchall()
# 打印结果集
print("result for query:")
for row in rows:
print("\t", row)
查询结束后,需要关闭游标及连接。
完整示例,示例使用 Python 语法:
python
# -*- coding: utf-8 -*-
import ksycopg2
database = "TEST"
user = "SYSTEM"
password = "123456"
host = "127.0.0.1"
port = "54321"
try:
conn = ksycopg2.connect(
"dbname={} user={} password={} host={} port={}".format(database, user, password, host, port))
cur = conn.cursor()
cur.execute('drop table if exists test_ksy')
cur.execute('create table test_ksy(id integer, name TEXT)')
cur.execute("insert into test_ksy values(%s, %s)", (1, "John"))
cur.execute("insert into test_ksy values(%s, %s)", (2, '中文测试文字'))
cur.execute("insert into test_ksy values(%s, %s)", (3, '!@#¥%......'))
cur.execute("select * from test_ksy")
rows = cur.fetchall()
print(type(rows), type(rows[0]))
print("result for query:")
for row in rows:
print("\t", row)
cur.close()
conn.close()
except Exception as e:
print(e)
exit()
四、运行程序
4.1 执行
编写好测试相关代码后,使用 Python 执行即可:
python
python test_ksycopg2.py
输出如下所示:
python
<class 'list'> <class 'tuple'>
result for query:
(1, 'John')
(2, '中文测试文字')
(3, '!@#¥%......')
4.2 bug 处理流程
-
驱动包 SSL 库与系统环境的 SSL 库冲突
原因 :系统环境中存在依赖库版本过高的问题,或者应用程序在运行时错误地加载了系统环境的SSL库。
解决:执行ldd _ksycopg命令检查驱动依赖关系,确保应用程序运行时正确加载驱动包提供的SSL库。若仍出现SSL相关报错,说明当前环境无法使用驱动包自带的SSL库,此时请联系技术支持获取包含静态依赖SSL库的Ksycopg2驱动包以解决冲突问题。 -
Ksycopg2 加载失败
报错信息 :No module named 'ksycopg2._ksycopg'
原因 :驱动包可能因架构不匹配、Python版本冲突或安装路径错误导致无法被Python识别。
解决:请确保安装与系统架构及Python版本匹配的驱动包。若驱动包已正确安装但仍出现问题,可能是Python未能识别Ksycopg2模块,此时可通过强制设置Python模块搜索路径来解决:
python
>>> import sys
>>> sys.path.insert(0, "Ksycopg2 驱动包的父目录")
五、结语
数据库技术的发展永无止境,Kingbase作为国产数据库的代表,正在书写着属于中国数据库的辉煌篇章。掌握其与Python的集成技术,不仅是技术能力的体现,更是参与国产化替代战略的重要实践。本文介绍了Python驱动Ksycopg2连接和使用Kingbase,后续博主会继续介绍其他语言的连接与数据库的开发。