Ubuntu系统下Python连接国产KingbaseES数据库实现增删改查

Ubuntu系统下Python连接国产KingbaseES数据库实现增删改查
摘要:本文将介绍Ubuntu系统下如何使用Python连接国产金仓数据库KingbaseES,并实现基本的增删改查操作。文中将通过具体代码示例展示连接数据库、执行SQL语句以及处理结果的全过程。这里把Python连接KingbaseES的经验整理一下,希望能帮到同样踩坑的兄弟。

目录

1.环境准备与驱动安装

1.1 科普ksycopg2知识

1.2 官方下载ksycopg2驱动

1.3 安装ksycopg2驱动

2. 连接KingbaseES数据库

3. 创建数据表

4. 实现增删改查功能

4.1 新增

4.2 查询

4.3 修改

4.4 删除

4.5 封装一个类crud方便复用

5.总结


1.环境准备与驱动安装

KingbaseES提供了专门的Python驱动包ksycopg2,它是基于Python DB API 2.0规范实现的线程安全数据库适配器!

1.1 科普ksycopg2知识

ksycopg2是Python编程语言的KingbaseES数据库适配器。它的主要特点是Python DB API 2.0 规范的完整实现和线程安全。

ksycopg2 主要在C程序中作为libkci包装器实现,因此既高效又安全。它拥有客户端和服务端游标,支持异步通信和通知、复制。

ksycopg2驱动需要和python大版本一致,如python3.8的ksycopg2驱动支持python3.8.x的任意小版本。

更多科普请查看金仓KingbaseES官方手册:2. 概述 — KingbaseES产品手册

1.2 官方下载ksycopg2驱动

1、首先需要下载并安装与你的Python版本和系统架构匹配的ksycopg2驱动。驱动可以从KingbaseES官方网站(KES-电科金仓官网)获取,如下图所示:

2、这里兄弟盟根据自己电脑系统,选择对应的版本,我这里是linux,下载下来如下图所示:KingbaseES_V009R001C010B0004_X64_Linux_Ksycopg2.tar 解压后可以看到有python2.7、python3.6、python3.7、python3.8、python3.9、python3.10、python3.11、python3.12,准备得真是周到,照顾各位大佬电脑上不同python版本,这一点为国产金仓数据库点赞👍👍👍

1.3 安装ksycopg2驱动

1、上面下载后解压并将ksycopg2文件夹放置在Python的模块搜索路径中,如果不清楚自己Python的模块在哪里,可以写个简单python代码查看:

import sys print(sys.path)

2、运行后如下所示,可以查看Python的模块位置:/usr/lib/python3/dist-packages

3、开始上传到:/usr/lib/python3/dist-packages

4、此外,还需要将KingbaseES的libkci库文件路径添加到LD_LIBRARY_PATH环境变量中:

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

如果不清楚自己KingbaseES的libkci库文件路在哪里,可以用这个命令查看:

ps -ef | grep kingbase

5、验证安装ksycoph2驱动

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

2. 连接KingbaseES数据库

使用ksycopg2连接KingbaseES数据库需要提供数据库名称、用户名、密码、主机地址和端口号等信息。

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}") return None # 建立数据库连接 connection = create_connection()

创建一个connect_database.py把上面代码复制进去,然后执行

python connect_database.py

3. 创建数据表

在执行增删改查操作前,需要先创建一张测试表,有表才好对后面的案例进行操作。

def create_table(conn): try: cursor = conn.cursor()" 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)

同理,在ubuntu服务器上新建一个create_table.py文件,把上面代码丢进去执行:

python create_table.py

4. 实现增删改查功能

4.1 新增

def insert_data_example(): """插入数据示例""" db_manager = KingbaseESManager( dbname="test", user="SYSTEM", password="qwe123!@#", host="127.0.0.1", port="54321" ) if db_manager.connect(): # 插入单条数据 insert_sql = "INSERT INTO user_info (id, username, age) VALUES (%s, %s, %s)" params = (1, '张三', 25) db_manager.execute_update(insert_sql, params) # 插入多条数据 users_to_insert = [ (2, '李四', 30), (3, '王五', 28), (4, '赵六', 35), (5, '钱七', 22) ] for user in users_to_insert: db_manager.execute_update(insert_sql, user) db_manager.disconnect() # 执行插入数据 insert_data_example()

调用python后登录数据库查看是否已经插入数据库,ubuntu登录如下所示

# 切换到kingbase用户 su - kingbase # 连接数据库 ksql -U SYSTEM -d test -p 54321 # 如果上面执行不成功,可以指定目录来连接 /kingbase/data/KESRealPro/V009R002C012/Server/bin/ksql -U SYSTEM -d test -p 54321

执行查询语句,查询所有用户数据,验证插入结果,如下图所示:

-- 查询所有用户数据,验证插入结果 SELECT * FROM user_info ORDER BY id;

4.2 查询

def query_data_example(): """查询数据示例""" db_manager = KingbaseESManager( dbname="test", user="SYSTEM", password="qwe123!@#", host="127.0.0.1", port="54321" ) if db_manager.connect(): # 查询所有数据 print("所有用户信息:") select_all_sql = "SELECT * FROM user_info ORDER BY id" all_users = db_manager.execute_query(select_all_sql) for user in all_users: print(user) # 根据ID查询特定用户 print("\n查询ID为2的用户:") select_by_id_sql = "SELECT * FROM user_info WHERE id = %s" user_by_id = db_manager.execute_query(select_by_id_sql, (2,)) print(user_by_id) # 根据年龄范围查询用户 print("\n年龄在25-30岁之间的用户:") select_by_age_sql = "SELECT * FROM user_info WHERE age BETWEEN %s AND %s ORDER BY age" users_by_age = db_manager.execute_query(select_by_age_sql, (25, 30)) for user in users_by_age: print(user) db_manager.disconnect() # 执行查询数据 query_data_example()

登录数据库验证如下所示:

4.3 修改

def update_data_example(): """更新数据示例""" db_manager = KingbaseESManager( dbname="TEST", user="SYSTEM", password="your_password", host="127.0.0.1", port="54321" ) if db_manager.connect(): # 更新用户年龄 print("更新张三的年龄为26:") update_sql = "UPDATE user_info SET age = %s WHERE id = %s" db_manager.execute_update(update_sql, (26, 1)) # 验证更新结果 print("\n更新后的用户信息:") select_sql = "SELECT * FROM user_info WHERE id = %s" updated_user = db_manager.execute_query(select_sql, (1,)) print(updated_user) db_manager.disconnect() # 执行更新数据 update_data_example()

执行python脚本后,登录数据库后台查看,确实是每个用户小于30岁的都加了1岁,如下所示:

4.4 删除

def delete_data_example(): """删除数据示例""" db_manager = KingbaseESManager( dbname="TEST", user="SYSTEM", password="your_password", host="127.0.0.1", port="54321" ) if db_manager.connect(): # 删除ID为5的用户 print("删除ID为5的用户:") delete_sql = "DELETE FROM user_info WHERE id = %s" db_manager.execute_update(delete_sql, (5,)) # 验证删除结果 print("\n删除后的所有用户:") select_all_sql = "SELECT * FROM user_info ORDER BY id" remaining_users = db_manager.execute_query(select_all_sql) for user in remaining_users: print(user) db_manager.disconnect() # 执行删除数据 delete_data_example()

同理,验证数据如下所示:

4.5 封装一个类crud方便复用

下面将实现完整的增删改查功能,并将这些操作封装在一个类中,方便复用。

import ksycopg2 from datetime import datetime class KingbaseESManager: def __init__(self, dbname, user, password, host, port): self.conn = None self.db_params = { "database": TEST, "user": SYSTEM, "password": qwe123!@#, "host": 127.0.0.1, "port": 54321 } 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): """根据ID查询用户""" sql = "SELECT * FROM user_info WHERE id = %s" params = (id,) return self.execute_query(sql, params) 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" params = (id,) return self.execute_update(sql, params) 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" params = (min_age, max_age) return self.execute_query(sql, params) # 使用示例 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) # 根据ID查询用户 print("\n查询ID为2的用户:") user_by_id = db_manager.select_user_by_id(2) print(user_by_id) # 更新用户年龄 print("\n更新张三的年龄为26:") db_manager.update_user_age(1, 26) # 查询年龄在25-30岁之间的用户 print("\n年龄在25-30岁之间的用户:") users_by_age = db_manager.search_users_by_age_range(25, 30) for user in users_by_age: print(user) # 删除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()

5.总结

本文介绍了在Ubuntu系统中使用Python连接国产金仓数据库KingbaseES的方法。主要内容包括:1.安装与Python版本匹配的ksycopg2驱动;2.配置环境变量和连接参数;3.实现数据库连接、建表及增删改查操作;4.封装可复用的数据库操作类。通过具体代码示例演示了数据插入、查询、更新和删除等常见操作,并提供了验证方法。文章还分享了环境配置中的常见问题和解决方案,帮助开发者快速上手KingbaseES数据库操作。

编码不易,希望各位点赞支持,也支持我们国产的数据库,纸上得来终觉浅,希望各位大佬也亲自动手尝试一下,如果遇到什么问题欢迎评论区留言交流,相互学习,共同进步~正在走向自律

本文相关《电科金仓》分类链接推荐:

第一章:基础与入门

1、【金仓数据库征文】政府项目数据库迁移:从MySQL 5.7到KingbaseES的蜕变之路

2、【金仓数据库征文】学校AI数字人:从Sql Server到KingbaseES的数据库转型之路

3、电科金仓2025发布会,国产数据库的AI融合进化与智领未来

4、国产数据库逆袭:老邓的“六大不敢替”被金仓逐一破解

5、《一行代码不改动!用KES V9 2025完成SQL Server → 金仓“平替”迁移并启用向量检索》

6、《赤兔引擎×的卢智能体:电科金仓如何用“三骏架构”重塑AI原生数据库一体机》

7、探秘KingbaseES在线体验平台:技术盛宴还是虚有其表?

8、破除“分布式”迷思:回归数据库选型的本质

9、KDMS V4 一键搞定国产化迁移:零代码、零事故、零熬夜——金仓社区发布史上最省心数据库迁移评估神器

10、KingbaseES V009版本发布:国产数据库的新飞跃

第二章:能力与提升

1、零改造迁移实录:2000+存储过程从SQL Server滑入KingbaseES V9R4C12的72小时
2、国产数据库迁移神器,KDMSV4震撼上线

3、在Ubuntu服务器上安装KingbaseES V009R002C012(Orable兼容版)数据库过程详细记录

4、金仓数据库迁移评估系统(KDMS)V4 正式上线:国产化替代的技术底气

5、Ubuntu系统下Python连接国产KingbaseES数据库实现增删改查

Read more

抽奖系统Selenium自动化测试流程解析

抽奖系统Selenium自动化测试流程解析

🌈感谢大家的阅读、点赞、收藏和关注  💕希望大家喜欢我本次的讲解💕 目录👑 一、自动化测试环境与框架核心配置🌟 1. 技术栈与依赖(测试文档 - 环境配置章节) 2. 浏览器驱动初始化(测试文档 - 基础工具章节) 二、核心工具类(测试文档 - 通用工具章节)❄️ 1. 测试数据自动生成(解决测试数据重复问题) 2. 自动化截图(测试失败溯源) 三、核心业务模块测试逻辑(测试文档 - 功能测试章节)🍃 1. 登录 / 注册模块(边界值 + 异常场景全覆盖) 2. 管理员核心模块(iframe 切换 + 多场景校验) 3. 测试执行入口(全流程自动化) 四、关键技术难点与解决方案(测试文档 -

By Ne0inhk
IPIDEA网页抓取API实战:全自动化实现eBay商品数据采集与Python接入

IPIDEA网页抓取API实战:全自动化实现eBay商品数据采集与Python接入

前言:跨境电商数据采集痛点与需求 随着跨境电商、数据驱动决策以及AI模型训练的需求不断增长,开发者与企业需要稳定、合规、可规模化 的网页数据抓取方案。但实际落地往往困难重重:高强度抓取、IP无法访问、JS渲染、数据格式不统一,这些让数据采集的技术门槛与成本居高不下。本篇将带你实操IPIDEA网页抓取API,并构建一个 可直接投入使用的eBay商品信息采集工具,一步步完成抓取、解析到下载的全过程,帮助你快速掌握全球电商数据采集的核心方法。 为什么需要网页抓取API 在跨境电商运营、市场竞品调研、AI模型训练等核心业务场景中,企业与开发者往往需要获取公开的电商商品信息、竞品动态等关键数据,但直接开展数据采集工作会面临三大核心痛点: 抓取门槛居高不下:Amazon、eBay等主流平台普遍部署了验证码校验、IP访问管理、JS动态渲染等多重抓取机制,若自研抓取系统,不仅需要持续投入人力进行技术突破与迭代,还会面临采集稳定性差、数据获取中断等问题,综合成本居高不下 合规风险难以规避:未经合规授权的公开数据采集行为,容易触碰GDPR、CCPA等国际数据合规法规;同时普通代理IP无法满足 “

By Ne0inhk

python八股文汇总(持续更新版)

python装饰器 一、装饰器是什么? 装饰器是Python中一种"化妆师",它能在不修改原函数代码的前提下,给函数动态添加新功能。 * 本质:一个接收函数作为参数,并返回新函数的工具。 * 作用:像给手机贴膜,既保护屏幕(原函数),又新增防摔功能(装饰逻辑)。 二、核心原理 1. 函数是"对象":Python中函数可以像变量一样传递,这是装饰器的基础。 2. 闭包机制:装饰器通过嵌套函数(闭包)保留原函数,并包裹新功能。 工作流程: 1. 你调用被装饰的函数(如hello())。 2. Python实际执行的是装饰器加工后的新函数。 3. 新函数先执行装饰器添加的逻辑(如权限检查),再执行原函数。 三、常见用途 场景 作用 生活类比 权限验证 检查用户是否登录再执行函数

By Ne0inhk
【免费领源码】96007物流车辆预约平台 计算机毕业设计项目推荐上万套实战教程JAVA,node.js,C++、python、大屏数据可视化

【免费领源码】96007物流车辆预约平台 计算机毕业设计项目推荐上万套实战教程JAVA,node.js,C++、python、大屏数据可视化

目 录 物流车辆预约平台 摘  要 第1章 绪论 1.1背景及意义 1.2 研究现状 1.3  论文组成结构 第2章 相关技术 2.1 B/S体系工作原理 2.2 Django框架介绍 2.3 MySQL数据库 第3章 系统分析 3.1 系统可行性分析 3.1.1技术可行性 3.1.2经济可行性 3.1.3操作可行性 3.2 功能需求分析 3.3 非功能性分析 3.4系统流程分析 3.

By Ne0inhk