引言
KingbaseES 作为国产数据库的代表,在金融、政府等领域广泛应用。本文介绍如何通过 Python 的 ksycopg2 驱动连接并操作 Kingbase 数据库,从基础连接到高级操作全面掌握这一技术栈。
Python 通过 Ksycopg2 驱动连接 Kingbase 数据库,涵盖环境配置、驱动安装、基础连接及数据操作。内容包含驱动架构说明、兼容性要求、Linux/Windows 环境变量设置、代码示例实现建表插入查询及异常处理流程。重点解决动态库依赖冲突与模块加载失败问题,提供完整的开发调试方案。

KingbaseES 作为国产数据库的代表,在金融、政府等领域广泛应用。本文介绍如何通过 Python 的 ksycopg2 驱动连接并操作 Kingbase 数据库,从基础连接到高级操作全面掌握这一技术栈。
ksycopg2 是 Python 编程语言的 KingbaseES 数据库适配器。在 Kingbase 场景下展现出完美的兼容性。其底层采用 C 扩展实现,通过 libpq 库与数据库进行通信。该驱动完整实现了 DB API 2.0 规范,支持线程安全、异步通信、二进制协议传输等高级特性。
驱动支持 Python 2.7 及 Python 3.5 至 3.10 版本。具体兼容性需参考官方文档。
满足以上条件后,可通过已发布版本的数据库安装包获取对应版本架构的 Ksycopg2 驱动。
检测系统架构及 Python 版本信息,选择适配的 Ksycopg2 数据库驱动。
查看 Python 版本
$ python -V
Python 3.5.6
当前环境使用的是 Python3.5,若对应架构是 x86_64,则应该选用 x86 架构的 Python3.5 版本的 Ksycopg2 驱动包安装。
解压适用于对应架构和 Python 版本的 Ksycopg2 驱动包后,Linux 环境下 Python 3.5 版本的驱动目录结构如下:
将 ksycopg2 这个文件夹拷贝到对应 Python 安装目录下的 site-packages 路径下(site-packages 路径是 Python 默认加载模块的搜索路径)。
安装完成后,在 Python 命令行中执行 import ksycopg2 命令,检查是否出现错误提示。
在确认驱动包使用无误的前提,若导入模块仍然报错
错误信息:
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 驱动包内一般会提供依赖库):
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 驱动成功导入。
创建测试程序文件夹 test_ksycopg2,新建源码文件 test_ksycopg2.py,目录示例如下:
test_ksycopg2 └── test_ksycopg2.py
导入 Ksycopg2
import ksycopg2
使用 ksycopg2.connect() 创建连接,并连接到数据库:
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 对象,用于操作数据库:
cur = conn.cursor()
使用 cur.execute() 执行 SQL 语句:
# 创建新表 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() 获取结果集并打印:
# 执行查询,并获取结果集 cur.execute("select * from test_ksy") rows = cur.fetchall()# 打印结果集 print("result for query:")for row in rows:print("\t", row)
查询结束后,需要关闭游标及连接。
完整示例,示例使用 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()
编写好测试相关代码后,使用 Python 执行即可:
python test_ksycopg2.py
输出如下所示:
<class'list'><class'tuple'> result for query:(1,'John')(2,'中文测试文字')(3,'!@#¥%……')
>>>import sys >>> sys.path.insert(0,"Ksycopg2 驱动包的父目录")

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online