Python驱动Ksycopg2连接和使用Kingbase:国产数据库实战指南

Python驱动Ksycopg2连接和使用Kingbase:国产数据库实战指南

引言

在国产数据库蓬勃发展的今天,KingbaseES作为国产数据库的佼佼者,凭借其高兼容性、高性能和高安全性,在金融、政府、能源等关键领域得到了广泛应用。本文将介绍如何通过Python的ksycopg2驱动连接并操作Kingbase数据库,从基础连接到高级操作全面掌握这一技术栈。

KingbaseES 数据库【系列篇章】

No.文章地址(点击进入)
1电科金仓KingbaseES数据库解析:国产数据库的崛起与技术创新
2KingBase数据库迁移利器:KDTS工具深度解析与实战指南
3KingBase数据库迁移利器:KDTS工具 MySQL数据迁移到KingbaseES实战
4电科金仓KingbaseES V9数据库:国产数据库的自主创新与行业实践深度解析
5KingbaseES客户端工具Ksql使用全指南:从安装到高级操作
6Spring JDBC与KingbaseES深度集成:构建高性能国产数据库应用实战
7深度解析:基于 ODBC连接 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 环境配置要求

  1. 安装与驱动对应版本的数据库,且数据库连接可用
  2. 确保 Ksycopg2 支持开发环境:
    Linux:x86_64、arm、loongarch、mips、sw
    Windows:提供64位支持
  3. 编译器:
    Linux:仅支持依赖 glibc 的编译的 Python。
    Windows:依赖 msvc120 的运行时库。
  4. Python 环境:
    见目录1.2中的版本兼容表

满足以上条件后,可通过已发布版本的数据库安装包、官网下载接口、或联系技服人员获取对应版本架构的 Ksycopg2 驱动

官网下载接口路径(点击进入)展示:

版本列表选取对应的版本文件

在这里插入图片描述

选择接口驱动

在这里插入图片描述

二、安装部署驱动

检测系统架构及 Python 版本信息,选择适配的 Ksycopg2 数据库驱动

查看 Python 版本

$ 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命令,检查是否出现错误提示。

在确认驱动包使用无误的前提,若导入模块仍然报错

错误信息

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 驱动成功导入

三、程序源码开发

3.1 创建文件夹

创建测试程序文件夹 test_ksycopg2,新建源码文件 test_ksycopg2.py,目录示例如下:

test_ksycopg2 └── test_ksycopg2.py 

3.2 开发源程序 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()

四、运行程序

4.1 执行

编写好测试相关代码后,使用 Python 执行即可:

python test_ksycopg2.py 

输出如下所示:

<class'list'><class'tuple'> result for query:(1,'John')(2,'中文测试文字')(3,'!@#¥%……')

4.2 bug 处理流程

  1. 驱动包 SSL 库与系统环境的 SSL 库冲突
    原因:系统环境中存在依赖库版本过高的问题,或者应用程序在运行时错误地加载了系统环境的SSL库。
    解决:执行ldd _ksycopg命令检查驱动依赖关系,确保应用程序运行时正确加载驱动包提供的SSL库。若仍出现SSL相关报错,说明当前环境无法使用驱动包自带的SSL库,此时请联系技术支持获取包含静态依赖SSL库的Ksycopg2驱动包以解决冲突问题。
  2. Ksycopg2 加载失败
    报错信息:No module named ‘ksycopg2._ksycopg’
    原因:驱动包可能因架构不匹配、Python版本冲突或安装路径错误导致无法被Python识别。
    解决:请确保安装与系统架构及Python版本匹配的驱动包。若驱动包已正确安装但仍出现问题,可能是Python未能识别Ksycopg2模块,此时可通过强制设置Python模块搜索路径来解决:
>>>import sys >>> sys.path.insert(0,"Ksycopg2 驱动包的父目录")

五、结语

数据库技术的发展永无止境,Kingbase作为国产数据库的代表,正在书写着属于中国数据库的辉煌篇章。掌握其与Python的集成技术,不仅是技术能力的体现,更是参与国产化替代战略的重要实践。本文介绍了Python驱动Ksycopg2连接和使用Kingbase,后续博主会继续介绍其他语言的连接与数据库的开发。

Read more

Clawdbot(Moltbot)源码部署全实测:从环境搭建到 WebChat 验证,避坑指南收好

Clawdbot(Moltbot)源码部署全实测:从环境搭建到 WebChat 验证,避坑指南收好

一、为啥折腾 Clawdbot? 最近刷技术圈总刷到 Clawdbot(后来也叫 Moltbot),说是能搭私人 AI 助手,支持 WhatsApp、Telegram 这些常用通道,还能跑在自己设备上,不用依赖第三方服务 —— 想着拉下来测试一下功能,顺便研究一下其源码的实现。 于是拉上 GitHub 仓库https://github.com/openclaw/openclaw,打算从源码部署试试,过程里踩了不少坑,干脆整理成记录,给同样想折腾的朋友避避坑。 二、源码部署前的准备:Windows 环境优先选 WSL2 一开始想直接用 Windows CMD 部署,结果装依赖时各种报错,查仓库文档才发现 Windows 推荐用 WSL2(Ubuntu/Debian 镜像就行),后续操作全在 WSL2 里完成: 1.

By Ne0inhk
Flutter 三方库 web_scraper 轻量级网页抓取核心适配进阶:精通跨端选择器表达式无头浏览器代理、极限提取残缺数据接口网格实现鸿蒙万物互联泛信息-适配鸿蒙 HarmonyOS ohos

Flutter 三方库 web_scraper 轻量级网页抓取核心适配进阶:精通跨端选择器表达式无头浏览器代理、极限提取残缺数据接口网格实现鸿蒙万物互联泛信息-适配鸿蒙 HarmonyOS ohos

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 web_scraper 轻量级网页抓取核心适配进阶:精通跨端选择器表达式无头浏览器代理、极限提取残缺数据接口网格实现鸿蒙万物互联泛信息即时采集 前言 在 OpenHarmony 应用开发中,我们并非总能获得完美的后端 API。当我们希望在鸿蒙应用中聚合一些公开的技术资讯、天气指数或是论坛热帖,但对方并未提供标准化 JSON 接口时,通过抓取网页(Web Scraping)获取结构化数据成了唯一的出路。web_scraper 库为 Flutter 开发者提供了一套基于 CSS 选择器的极简网页爬虫方案。本文将实战介绍如何在鸿蒙端利用该库构建一个高效的信息采集底座。 一、原直线性 / 概念介绍 1.1 基础原理/概念介绍 web_scraper 的核心逻辑是基于 HTTP 内容请求与 HTML DOM 树的解析映射。

By Ne0inhk
离开舒适区之后:从三年前端到 CS 硕士——我在韩国亚大读研的得失

离开舒适区之后:从三年前端到 CS 硕士——我在韩国亚大读研的得失

过去一年多,我做了一个挺重要的决定:辞职,去韩国留学读研。 这段时间我几乎没怎么学习新的前端内容,但也没有停下来。我在韩国亚洲大学完成了计算机科学与技术(大数据)硕士的学习,在高强度的节奏里重新建立了自己的方法,也因为持续写博客获得了一些机会,担任本科 Web 实训课讲师。现在这段留学告一段落,我也准备重新回到前端领域,把这段经历当作一份额外的积累带回去。这篇复盘主要是想把这一路的收获、疲惫和一些值得记住的瞬间记录下来,留给未来的自己,也分享给路过的你。 文章目录 * 1、写在前面:我为什么会从前端转去读研 * 2、留学生活的关键词:卷、AI、被看见以及校庆的“放开玩” * 3、我的“结果卡片” * 4、得:这一年半我真正收获的东西 * 5、失:我付出的代价 * 6、期末周:我经历过的“高强度交付周” * 7、前端三年经验,如何在读研里“迁移复用” * 8、我在韩国的学习系统:

By Ne0inhk

OpenClaw Webhook 详解:完整指南

Webhook 是将 OpenClaw 从“聊天助手”快速转变为“响应式系统”的最佳方式。无需等待您主动发送消息,GitHub 可以在 PR 提交时通知 OpenClaw,Stripe 可以在支付失败时通知 OpenClaw,n8n 也可以按计划通知 OpenClaw。OpenClaw 会接收这些传入事件,并将其转换为代理运行或轻量级唤醒操作,然后将结果路由回您实际使用的任何渠道。 本文重点介绍 OpenClaw 网关上的 HTTP Webhook。OpenClaw 中还有另一种东西,在一些文档和配置中也被称为“钩子”。这些是网关内部的事件钩子,当本地生命周期事件触发时运行。它们也很有用,但 Stripe 或 GitHub 与服务器通信的方式并非通过它们。 如果您的 OpenClaw 实例是刚刚部署在 VPS 上,并且您仍然使用 SSH 进行基本操作,那么首先要确保网关稳定,

By Ne0inhk