跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

Ubuntu 下 Python 连接 KingbaseES 数据库实现增删改查

Ubuntu 环境下配置 Python 驱动连接 KingbaseES 数据库,涵盖驱动安装、环境变量设置及基于封装类的增删改查实战。通过具体代码示例演示了连接建立、建表操作及数据交互流程,解决了国产数据库在 Linux 下的集成问题,提供可复用的管理类方案。

氛围发布于 2026/3/26更新于 2026/7/2735 浏览
Ubuntu 下 Python 连接 KingbaseES 数据库实现增删改查

在 Ubuntu 环境下使用 Python 操作国产金仓数据库(KingbaseES),核心在于正确安装驱动并配置好环境变量。下面将结合实战步骤,演示如何完成从环境准备到封装管理类的全过程。

1. 环境准备与驱动安装

KingbaseES 提供了专用的 Python 驱动包 ksycopg2,它基于 Python DB API 2.0 规范实现,支持线程安全及异步通信。需要注意的是,驱动版本需与当前 Python 大版本一致(例如 Python 3.8 对应 ksycopg2 的 3.8 适配包)。

1.1 获取驱动

前往金仓官网下载页面,根据系统架构和 Python 版本选择对应的安装包。解压后通常会包含针对不同 Python 版本的目录,如 python3.6、python3.7 等。

1.2 安装驱动

将解压后的 ksycopg2 文件夹复制到 Python 的模块搜索路径中。如果不确定路径位置,可运行以下代码查看:

import sys
print(sys.path)

假设输出中包含 /usr/lib/python3/dist-packages,则将驱动文件上传至该目录即可。

此外,必须将 KingbaseES 的 C 库路径添加到环境变量中,否则运行时可能找不到 libkci。执行以下命令(路径需根据实际情况调整):

export LD_LIBRARY_PATH=/kingbase/data/KESRealPro/V009R002C012/Server/lib:$LD_LIBRARY_PATH

若不清楚库文件位置,可通过 ps -ef | grep kingbase 查找进程路径。最后验证安装是否成功:

import ksycopg2
print("ksycopg2 驱动安装成功")

2. 连接数据库

建立连接需要提供数据库名、用户名、密码、主机地址及端口。这里提供一个基础的连接函数示例:

import ksycopg2

def create_connection():
    try:
        conn = ksycopg2.connect(
            database="TEST",
            user="SYSTEM",
            password="qwe123!@#",
            host="127.0.0.1",
            port=54321
        )
        print("数据库连接成功")
        return conn
    except Exception as e:
        print(f"连接数据库失败:{e}")
         

connection = create_connection()
return
None

3. 创建数据表

在执行增删改查前,建议先构建一张测试表。注意 SQL 语句中的引号匹配及缩进问题:

def create_table(conn):
    try:
        cursor = conn.cursor()
        create_table_sql = """
        CREATE TABLE IF NOT EXISTS user_info (
            id INTEGER PRIMARY KEY,
            username VARCHAR(50) NOT NULL,
            age INTEGER,
            created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
        )
        """
        cursor.execute(create_table_sql)
        conn.commit()
        cursor.close()
        print("表创建成功")
    except Exception as e:
        print(f"创建表失败:{e}")
        conn.rollback()

if connection:
    create_table(connection)

4. 封装 CRUD 管理类

为了复用性更高,建议将数据库操作封装成一个类。这样既能统一管理连接状态,又能避免重复编写连接逻辑。

import ksycopg2
from datetime import datetime

class KingbaseESManager:
    def __init__(self, dbname, user, password, host, port):
        self.conn = None
        self.db_params = {
            "database": dbname,
            "user": user,
            "password": password,
            "host": host,
            "port": port
        }

    def connect(self):
        try:
            self.conn = ksycopg2.connect(**self.db_params)
            print("数据库连接成功")
            return True
        except Exception as e:
            print(f"连接数据库失败:{e}")
            return False

    def disconnect(self):
        if self.conn:
            self.conn.close()
            print("数据库连接已关闭")

    def execute_query(self, sql, params=None):
        try:
            cursor = self.conn.cursor()
            if params:
                cursor.execute(sql, params)
            else:
                cursor.execute(sql)
            results = cursor.fetchall()
            cursor.close()
            return results
        except Exception as e:
            print(f"查询执行失败:{e}")
            return None

    def execute_update(self, sql, params=None):
        try:
            cursor = self.conn.cursor()
            if params:
                cursor.execute(sql, params)
            else:
                cursor.execute(sql)
            self.conn.commit()
            affected_rows = cursor.rowcount
            cursor.close()
            print(f"操作成功,影响行数:{affected_rows}")
            return affected_rows
        except Exception as e:
            self.conn.rollback()
            print(f"操作执行失败:{e}")
            return -1

    # --- 业务方法示例 ---

    def insert_user(self, id, username, age):
        sql = "INSERT INTO user_info (id, username, age) VALUES (%s, %s, %s)"
        params = (id, username, age)
        return self.execute_update(sql, params)

    def select_all_users(self):
        sql = "SELECT * FROM user_info ORDER BY id"
        return self.execute_query(sql)

    def select_user_by_id(self, id):
        sql = "SELECT * FROM user_info WHERE id = %s"
        return self.execute_query(sql, (id,))

    def update_user_age(self, id, new_age):
        sql = "UPDATE user_info SET age = %s WHERE id = %s"
        params = (new_age, id)
        return self.execute_update(sql, params)

    def delete_user(self, id):
        sql = "DELETE FROM user_info WHERE id = %s"
        return self.execute_update(sql, (id,))

    def search_users_by_age_range(self, min_age, max_age):
        sql = "SELECT * FROM user_info WHERE age BETWEEN %s AND %s ORDER BY age"
        return self.execute_query(sql, (min_age, max_age))

5. 实战调用示例

有了上述管理类,实际业务中只需实例化对象并调用相应方法即可。以下是完整的操作流程演示:

if __name__ == "__main__":
    db_manager = KingbaseESManager(
        dbname="TEST",
        user="SYSTEM",
        password="qwe123!@#",
        host="127.0.0.1",
        port=54321
    )

    if db_manager.connect():
        # 插入多条用户数据
        users_to_insert = [
            (1, '张三', 25),
            (2, '李四', 30),
            (3, '王五', 28),
            (4, '赵六', 35),
            (5, '钱七', 22)
        ]
        for user in users_to_insert:
            db_manager.insert_user(*user)

        # 查询所有用户
        print("所有用户信息:")
        all_users = db_manager.select_all_users()
        for user in all_users:
            print(user)

        # 更新用户年龄
        print("\n更新张三的年龄为 26:")
        db_manager.update_user_age(1, 26)

        # 删除 ID 为 5 的用户
        print("\n删除 ID 为 5 的用户:")
        db_manager.delete_user(5)

        # 再次查询验证
        print("\n删除后的所有用户:")
        remaining_users = db_manager.select_all_users()
        for user in remaining_users:
            print(user)

        db_manager.disconnect()

通过这种方式,我们不仅完成了基础的数据交互,还建立了一套可复用的数据库操作框架。在实际项目中,只需修改连接参数和 SQL 逻辑,即可快速适配不同的业务需求。

目录

  1. 1. 环境准备与驱动安装
  2. 1.1 获取驱动
  3. 1.2 安装驱动
  4. 2. 连接数据库
  5. 3. 创建数据表
  6. 4. 封装 CRUD 管理类
  7. 5. 实战调用示例
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • LIBERO 数据集:终身机器人学习基准测试平台
  • Git 提交信息规范
  • 使用 Whisper 和 Transformers 自动生成中英文双语字幕
  • Copilot 四大模式详解:Ask、Edit、Agent 与 Plan 的核心区别
  • JESD204B 协议链路建立与 Xilinx IP 仿真详解
  • Google Antigravity AI IDE 工具介绍
  • K-means 聚类算法原理与实现详解
  • C++ STL Vector 扩容机制深度剖析:动态数组性能优化底层逻辑
  • 前端如何实现用户回到上次阅读的位置
  • VS Code 内置 Git 分支操作实战指南
  • CCF-GESP 2025 年 6 月 C++ 二级真题解析
  • 贪心算法:674.最长连续递增序列
  • 前端视角:从零搭建并启动若依后端环境
  • AI 网络技术演进对路由协议的重塑分析
  • C++ 核心基础概念解析
  • LLaMA2 模型架构深度解析
  • 在 VS Code 的 Copilot 里接入第三方 OpenAI 兼容模型
  • Spring Boot Web 后端开发核心注解详解
  • voidImageViewer:轻量级图像查看器,支持 GIF/WEBP 动画播放
  • N46Whisper 实战:利用云端 AI 快速生成日语视频字幕

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online