Python操作国产金仓数据库(KingbaseES)全流程:从环境搭建到实战应用

Python操作国产金仓数据库(KingbaseES)全流程:从环境搭建到实战应用

在这里插入图片描述

Python操作国产金仓数据库(KingbaseES)全流程:从环境搭建到实战应用

Python操作国产金仓数据库(KingbaseES)全流程:从环境搭建到实战应用,大家好,我是 xcLeigh。现在国产化数据库越来越普及,金仓数据库(KingbaseES)作为一款超实用的企业级关系型数据库,在政府、金融、能源这些关键领域用得特别多。今天我就带大家从零开始,一步步学会用Python操作金仓数据库,从环境准备、连接数据库,到CRUD核心操作、事务处理,再到常见问题排查,内容全是干货,代码拿过去就能用,就算是新手也能很快上手!
在这里插入图片描述

前言

在这里插入图片描述

    中电科金仓(北京)科技股份有限公司(以下简称“电科金仓”)成立于1999年,是成立最早的拥有自主知识产权的国产数据库企业,也是中国电子科技集团(CETC)成员企业。电科金仓以“提供卓越的数据库产品助力企业级应用高质量发展”为使命,致力于“成为世界卓越的数据库产品与服务提供商”。

    电科金仓自成立起始终坚持自主创新,专注数据库领域二十余载,具备出色的数据库产品研发及服务能力,核心产品金仓数据库管理系统KingbaseES(简称“KES”)是面向全行业、全客户关键应用的企业级大型通用数据库。KES产品V9版本已通过国家权威机构认证,产品核心源代码自主率达到100%。2018年,电科金仓申报的“数据库管理系统核心技术的创新与金仓数据库产业化”项目荣获国家科学技术进步二等奖。金仓数据库管理系统KES于2022年入选国务院国资委发布的十项国有企业数字技术典型成果,彰显数据库领域国家队硬实力。继2023年金仓数据库管理系统V8通过第一批《安全可靠测评》后,2024年金仓数据库管理系统V9、金仓分布式HTAP数据库软件集群V3再度入围,至此电科金仓共计2款产品3个版本通过《安全可靠测评》*。

在这里插入图片描述

🥇 点击进入金仓数据库专栏,本专栏聚焦金仓数据库(KingbaseES)这一国产企业级融合数据库,为开发者及技术决策者提供从基础操作到架构设计的系统化学习路径。从多语法兼容(Oracle/MySQL/PostgreSQL)、多模数据存储(关系 / 文档 / 时序 / GIS)等功能展开讲解!


🌞 正文开始:


一、前置知识与环境准备

1.1 核心概念

金仓数据库(KingbaseES)在数据库产品研发和服务方面能力很突出,它的核心产品金仓数据库管理系统KingbaseES(简称“KES”),是面向全行业、全客户关键应用的企业级大型通用数据库。而且KES的V9版本已经通过国家权威机构认证,核心源代码自主率更是做到了100%,这一点特别厉害。

1.2 环境清单

  • 操作系统:Windows 10/11 或者 CentOS 7/8都能用
  • Python版本:得是3.7及以上的,不然可能会有兼容性问题
  • 金仓数据库:推荐用KingbaseES V8R6,这个版本兼容性比较好,用着省心
  • 依赖库:psycopg2-binary,这个库不用咱们手动编译,直接安装就行,很方便

1.3 环境搭建步骤

步骤1:安装Python:先去Python官网下载对应版本的安装包,安装的时候记得勾选“Add Python to PATH”,然后按默认步骤装完就行。装完之后,打开命令行输入python --version,能显示版本号就说明装成功了。对了,要是不清楚怎么操作,也可以看看我之前写的这篇文章:https://xcleigh.blog.ZEEKLOG.net/article/details/149340832

步骤2:安装psycopg2-binary:打开命令行,直接执行下面这个命令就能安装这个依赖库:

pip install psycopg2-binary 

装完之后,Windows系统可以用pip list | findstr psycopg2,Linux系统用pip list | grep psycopg2,能看到这个库的信息,就说明安装成功了。

步骤3:确认金仓数据库服务:这一步很关键,得先确保金仓数据库已经启动了,而且能用像Kingbase Navigator这样的客户端正常连接。另外,一定要把数据库的IP地址、端口、数据库名、用户名、密码记下来,后面连接数据库的时候得用。要是这一步不清楚,也可以参考我这篇文章:https://xcleigh.blog.ZEEKLOG.net/article/details/147401270


二、Python连接金仓数据库

其实Python连接金仓数据库的原理不复杂,就是通过psycopg2库创建一个数据库连接对象,创建的时候得把金仓数据库的连接参数(比如host、port、dbname这些)都指定好。连接成功之后,再创建游标对象,就能用它来执行SQL语句了。

2.2 连接代码实现

里面的具体参数,大家得根据自己本地数据库的连接配置来填哦。

在这里插入图片描述
import psycopg2 from psycopg2 import OperationalError defconnect_kingbase():# 金仓数据库连接参数 conn_params ={"host":"127.0.0.1",# 数据库IP地址"port":54321,# 数据库端口(默认54321)"dbname":"test",# 数据库名"user":"system",# 用户名"password":"Kingbase123"# 密码} conn =Nonetry:# 建立数据库连接 conn = psycopg2.connect(**conn_params)print("✅ 金仓数据库连接成功!")except OperationalError as e:print(f"❌ 连接失败:{e}")return conn # 测试连接if __name__ =="__main__": connection = connect_kingbase()

运行效果:

在这里插入图片描述

代码说明

  • 咱们用psycopg2.connect()这个方法,把连接参数传进去,就能得到一个连接对象;
  • 这里还加了OperationalError异常捕获,像IP填错了、密码不对这些连接失败的情况,都能在这里处理;
  • 运行代码之后,要是能看到“✅ 金仓数据库连接成功!”这句话,就说明数据库连接正常啦。

三、核心操作:CRUD实战

接下来,我就以“学生表(student)”为例,给大家演示一下用Python操作金仓数据库的增删改查(CRUD)操作。首先得先创建student表,对应的SQL语句在下面:

CREATETABLE student ( id SERIALPRIMARYKEY, name VARCHAR(50)NOTNULL, age INTNOTNULL, gender VARCHAR(10)NOTNULL, major VARCHAR(100)NOTNULL);

运行效果:

在这里插入图片描述

3.1 新增数据(Create)

新增数据很简单,就是用cursor.execute()执行INSERT语句,不管是插入单条学生数据,还是多条都能搞定。

definsert_student(conn, students): insert_sql =""" INSERT INTO student (name, age, gender, major) VALUES (%s, %s, %s, %s); """try:with conn.cursor()as cur: cur.executemany(insert_sql, students) conn.commit()print(f"✅ 成功插入{cur.rowcount}条数据")except Exception as e: conn.rollback()print(f"❌ 插入失败:{e}")# 测试新增if __name__ =="__main__": conn = connect_kingbase()if conn: student_list =[("张三",20,"男","计算机科学与技术"),("李四",21,"女","软件工程"),("王五",19,"男","电子信息工程")] insert_student(conn, student_list) conn.close()

运行效果:

在这里插入图片描述


数据库数据变化:

在这里插入图片描述

3.2 查询数据(Read)

查询数据就是执行SELECT语句,不管是想查学生表的所有数据,还是加条件查询、排序,都能实现。

defquery_student(conn, condition=None):# 基础查询语句 query_sql ="SELECT * FROM student"if condition: query_sql +=f" WHERE {condition}" query_sql +=" ORDER BY id;"try:with conn.cursor()as cur: cur.execute(query_sql)# 获取列名 columns =[desc[0]for desc in cur.description]# 获取查询结果 results = cur.fetchall()# 转换为字典列表(更易读) students =[dict(zip(columns, row))for row in results]print(f"📊 查询结果(共{len(students)}条):")for student in students:print(student)return students except Exception as e:print(f"❌ 查询失败:{e}")return[]# 测试查询if __name__ =="__main__": conn = connect_kingbase()if conn:# 查询所有学生print("--- 所有学生 ---") query_student(conn)# 条件查询:年龄大于20的学生print("\n--- 年龄大于20的学生 ---") query_student(conn,"age > 20") conn.close()

运行效果:

在这里插入图片描述

3.3 更新数据(Update)

更新数据就是执行UPDATE语句,把符合指定条件的学生数据修改掉就行。

defupdate_student(conn, new_data, condition):# SQL更新语句 update_sql =f""" UPDATE student SET {', '.join([f"{k}=%s"for k in new_data.keys()])} WHERE {condition}; """try:with conn.cursor()as cur: cur.execute(update_sql,list(new_data.values())) conn.commit()print(f"✅ 成功更新{cur.rowcount}条数据")except Exception as e: conn.rollback()print(f"❌ 更新失败:{e}")# 测试更新if __name__ =="__main__": conn = connect_kingbase()if conn:# 将张三的专业改为"人工智能" update_student(conn,{"major":"人工智能"},"name='张三'")# 查看更新结果print("\n--- 更新后的张三 ---") query_student(conn,"name='张三'") conn.close()

运行效果:

在这里插入图片描述

3.4 删除数据(Delete)

删除数据也很 straightforward,执行DELETE语句,把符合指定条件的学生数据删掉就可以了。

defdelete_student(conn, condition):# SQL删除语句 delete_sql =f"DELETE FROM student WHERE {condition};"try:with conn.cursor()as cur: cur.execute(delete_sql) conn.commit()print(f"✅ 成功删除{cur.rowcount}条数据")except Exception as e: conn.rollback()print(f"❌ 删除失败:{e}")# 测试删除if __name__ =="__main__": conn = connect_kingbase()if conn:# 删除王五的记录 delete_student(conn,"name='王五'")# 查看删除结果print("\n--- 删除后的学生表 ---") query_student(conn) conn.close()

四、高级应用:事务与连接池

4.1 事务处理

金仓数据库是支持事务ACID特性的,也就是原子性、一致性、隔离性、持久性。在Python里,默认情况下,连接对象的“自动提交”是关闭的,所以得咱们手动调用commit()来提交事务,要是出了问题,就用rollback()回滚事务。
事务示例场景:比如转账的时候,要扣掉A账户的余额,同时给B账户加余额,这两步得同时成功才行。要是其中一步出了错,那整个操作都得回滚,不然账户余额就乱了。

4.2 连接池优化

在高并发的场景下,要是频繁创建、关闭数据库连接,会特别消耗资源。这时候用连接池就很管用,能有效提升性能。我推荐大家用psycopg2.pool模块来实现连接池,具体代码如下:

from psycopg2 import pool # 创建连接池 connection_pool = pool.SimpleConnectionPool( minconn=1, maxconn=5, host="192.168.1.100", port=54321, dbname="testdb", user="system", password="Kingbase123")# 从连接池获取连接 conn = connection_pool.getconn()# 执行操作...# 归还连接到连接池 connection_pool.putconn(conn)# 关闭连接池(程序退出时) connection_pool.closeall()

五、常见问题与排查技巧

5.1 连接失败

  • 问题现象:有时候会报错“could not connect to server: Connection refused”,遇到这种情况别慌,按步骤排查就行;
  • 排查步骤:首先,检查一下数据库的IP和端口是不是填对了,别输错了数字;然后,确认数据库服务是不是已经启动了,没启动的话肯定连不上;接着,看看防火墙有没有把数据库端口挡住,要是挡住了得开放端口;最后,再核对一下用户名和密码,别记混了。

5.2 语法错误

  • 问题现象:报错“syntax error at or near …”,这一般就是SQL语句有问题;
  • 排查步骤:先看看写的SQL语句是不是符合金仓数据库的语法规范,不同数据库语法可能有点差别;另外,要注意占位符得用%s,可别用?或者@这些,用错了也会报错。

5.3 事务未提交

  • 问题现象:执行了INSERT、UPDATE、DELETE这些操作后,去数据库里看,数据根本没变化,这是怎么回事呢?;
  • 排查步骤:其实很可能是忘了提交事务,大家要确认一下,执行完SQL语句后,有没有调用conn.commit()。要是没提交,等连接关闭的时候,事务会自动回滚,数据自然就没变化了。

六、总结

今天这篇文章,我把Python操作金仓数据库的全流程都讲清楚了,从环境搭建到CRUD实战,再到高级的事务和连接池应用,里面的代码示例我都实际测试过,大家拿过去就能用。掌握了这些知识,你就能轻松实现Python和金仓数据库的交互,日常开发中的需求基本都能满足。
要是觉得这篇文章对你有帮助,别忘了点赞、收藏,也可以关注我,后面我还会分享更多国产化数据库和Python相关的实战教程!要是在实践的时候遇到问题,也可以在评论区留言,我看到了会及时回复~

联系博主

    xcLeigh 博主,全栈领域优质创作者,博客专家,目前,活跃在ZEEKLOG、微信公众号、小红书、知乎、掘金、快手、思否、微博、51CTO、B站、腾讯云开发者社区、阿里云开发者社区等平台,全网拥有几十万的粉丝,全网统一IP为 xcLeigh。希望通过我的分享,让大家能在喜悦的情况下收获到有用的知识。主要分享编程、开发工具、算法、技术学习心得等内容。很多读者评价他的文章简洁易懂,尤其对于一些复杂的技术话题,他能通过通俗的语言来解释,帮助初学者更好地理解。博客通常也会涉及一些实践经验,项目分享以及解决实际开发中遇到的问题。如果你是开发领域的初学者,或者在学习一些新的编程语言或框架,关注他的文章对你有很大帮助。

    亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。

     愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。

    至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。


     💞 关注博主 🌀 带你实现畅游前后端!

     🥇 从零到一学习Python 🌀 带你玩转Python技术流!

     🏆 人工智能学习合集 🌀 搭配实例教程与实战案例,帮你构建完整 AI 知识体系

     💦 :本文撰写于ZEEKLOG平台,作者:xcLeigh所有权归作者所有)https://xcleigh.blog.ZEEKLOG.net/,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。


在这里插入图片描述

     📣 亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(或者关注下方公众号,看见后第一时间回复,还有海量编程资料等你来领!),博主看见后一定及时给您答复 💌💌💌

Read more

docker 安装时需要安装WSL 但下载过慢 离线安装 WSL方法

如果 wsl --install 下载速度慢,可以通过 离线安装 或 手动下载组件 来加速。以下是具体步骤: 一句话解决(推荐) power管理员身份运行下面一句稍等一个小时 wsl --install --web-download 手动下载 WSL 相关组件** 1. 下载离线包 * WSL2 内核更新包(必需) 下载地址:https://aka.ms/wsl2kernel(直接下载 .msi 文件安装) * Linux 发行版离线包(可选) 部分发行版(如 Ubuntu)提供官方 .appx 或 .zip 离线包: * Ubuntu: https://aka.ms/wslubuntu * 其他发行版:替换链接中的名称(

By Ne0inhk
Windows 家庭版安装 Docker 超详细教程(附避坑指南)

Windows 家庭版安装 Docker 超详细教程(附避坑指南)

一、Windows系统搭建Docker 1.1 启用虚拟化 任务管理器(CTRL+Shift+Esc), 选择性能,查看CPU虚拟化,确认是否已启用(默认启用)。 1.2 安装虚拟机并开启Hyper-V功能、虚拟机功能。 1.2.1 windows专业版,不需要 执行 123.cmd 1.2.2 Win10家庭版 因为Win10家庭版没有安装虚拟机,所以通过新建123.cmd安装一个Hyper-V 新建一个123.cmd文件,并将如下内容复制进去 pushd"%~dp0"dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt for

By Ne0inhk
【Linux指南】用户与系统基础操作

【Linux指南】用户与系统基础操作

引言 在 Linux 系统的世界里,用户管理与系统监控如同打开操作系统大门的两把基础钥匙,是每位学习者必须掌握的核心技能。无论是远程登录服务器进行管理,还是创建删除用户以规范权限体系,亦或是通过系统命令实时监控服务器状态,这些操作都构成了 Linux 系统管理的基石。 本文将从用户登录、创建与删除的基础操作出发,深入解析系统信息查看工具的使用技巧,帮助读者构建从实操到理论的完整知识框架,为后续深入学习 Linux 系统管理奠定坚实基础。 文章目录 * 引言 * 一、用户管理三剑客:登录、创建与删除 * 1. 用户登录:ssh远程连接服务器 * 2. 新建用户:adduser与passwd * 3. 删除用户:userdel的谨慎操作 * 二、系统信息查看:从内核到进程的全面监控 * 1. uname:查看系统基础信息 * 2. sar:查看系统性能 * 3. top:实时进程监控的任务管理器 * 结语 一、用户管理三剑客:登录、

By Ne0inhk
Flutter 三方库 talker_chopper_logger 的鸿蒙化适配指南 - 实现 Chopper 网络层与 Talker 日志系统的深度集成、支持响应式 HTTP 监控与自动化错误诊断

Flutter 三方库 talker_chopper_logger 的鸿蒙化适配指南 - 实现 Chopper 网络层与 Talker 日志系统的深度集成、支持响应式 HTTP 监控与自动化错误诊断

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 talker_chopper_logger 的鸿蒙化适配指南 - 实现 Chopper 网络层与 Talker 日志系统的深度集成、支持响应式 HTTP 监控与自动化错误诊断 前言 在进行 Flutter for OpenHarmony 的网络层开发时,使用 Chopper 作为 HTTP 客户端是非常成熟的选择。然而,如何优雅地监控、记录并调试复杂的网络请求(特别是处理鸿蒙端侧的异构网络环境)是一个痛点。talker_chopper_logger 是专为集成 Talker 日志监控而设计的插件。本文将探讨如何在鸿蒙端构建可视化、可交互的网络请求监控日志系统。 一、原理解析 / 概念介绍 1.1 基础原理

By Ne0inhk