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

【python】全流程图文安装教程

下载Python安装包 访问Python官方网站(https://www.python.org/downloads/),选择与操作系统匹配的版本(Windows/macOS/Linux)。推荐下载最新稳定版,勾选“Add Python to PATH”选项(Windows用户需特别注意)。 运行安装程序 双击下载的安装包(如python-3.x.x.exe或python-3.x.x-macosx.pkg),在安装界面中选择“Install Now”或自定义安装路径。勾选“Install launcher for all users”和“Add Python to PATH”以确保命令行直接调用。 验证安装 打开终端(Windows为CMD/PowerShell,macOS/Linux为Terminal)

By Ne0inhk
【毕业设计】基于python的深度学习音乐推荐系统(源码+文档+远程调试,全bao定制等)

【毕业设计】基于python的深度学习音乐推荐系统(源码+文档+远程调试,全bao定制等)

java毕业设计-基于springboot的(源码+LW+部署文档+全bao+远程调试+代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围::小程序、SpringBoot、SSM、JSP、Vue、PHP、Java、python、爬虫、数据可视化、大数据、物联网、机器学习等设计与开发。 主要内容:免费开题报告、任务书、全bao定制+中期检查PPT、代码编写、🚢文编写和辅导、🚢文降重、长期答辩答疑辅导、一对一专业代码讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路。 特色服务内容:答辩必过班 (全程一对一技术交流,帮助大家顺利完成答辩,

By Ne0inhk
【2024版】超详细Python+Pycharm安装保姆级教程,Python环境配置和使用指南,看完这一篇就够了

【2024版】超详细Python+Pycharm安装保姆级教程,Python环境配置和使用指南,看完这一篇就够了

本文将从 Python解释器安装到Pycharm专业版安装和破姐插件等使用都进行了详细介绍,希望能够帮助到大家。 目录 * Python 3.12.6解释器安装 * PyCharm 2024.2.1开发工具安装 * PyCharm 中运行代码 * PyCharm加入破姐插件 * PyCharm基本设置及汉化 一、下载装 Python 1、进入Python官网首页,下载最新的Python版本 Download Python | Python.org 选择更新到3.12.6,下载64位的版本 👉大礼包🎁:python安装包/pycharm教程免费分享(安全链接,放心点击)👈 2、下载完成后,进行安装 1.双击Python-3.12.6-amd64.exe 2.选择Customize installation自定义安装路径,记得勾选下方两个选项 * Install now 默认安装和默认安装路径(

By Ne0inhk

python迭代器和生成器

1.迭代器 1.1 可迭代对象         可迭代对象指的是 实现了__iter__方法的对象,可以被for循环遍历的容器,比如一个列表,自定义的链表等。使用 iter() 方法获取它的迭代对象(可以理解为链表的指针) 1.2 迭代器         迭代器是指实现了 __iter__ 和 __next__方法对象,__iter__返回它本身,确保每个单独的节点都是可以被迭代的,满足链表可以从第n个元素开始访问的需求;__next__返回它的下一个节点,如果已经遍历完毕则抛出StopIteration异常。 # 实现了__iter__方法,是一个可迭代对象,可以理解为是一个整的链表,但此时还不能单独访问其中的元素 class Node: def __init__(self, data): self.data = data self.next: Node | None

By Ne0inhk