news 2026/4/16 13:31:32

学习python调用dmpython库获取达梦数据库模式信息的基本方式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
学习python调用dmpython库获取达梦数据库模式信息的基本方式

采用dmpython库连接达梦数据库,通过以下查询方式获取某一schema的所有表信息,然后获取数据库表的数据量、占用空间及实际大小:
1)查询表dba_tables获取指定schema的所有数据库表;
2)通过select count(1)查询每张表中的数据条数;
3)通过SELECT TABLE_USED_SPACE查询每张表的占用数据页数;
4)通过SELECT TABLE_USED_PAGES查询每张表的实际使用数据页数;
5)通过查询表V$DM_INI获取数据页数的大小。

基于上述查询方式获取指定模式的数据库表信息,并将表信息以字典和元组形式保存,最终序列化到本地json文件内,主要程序如下所示:

importdmPythonimportjson queryresult={}schemaname='SCHOOL'# 创建连接conn=dmPython.connect(server="127.0.0.1",port=5236,user="XXXXXX",password="XXXXXXXXX",schema=schemaname)# 执行SQL查询cursor=conn.cursor()cursor.execute("select TABLE_NAME from dba_tables where owner='SCHOOL'")tables=cursor.fetchall()fortableintables:tablename=str(table[0])# 获取表中数据总数cursor.execute("select count(1) from "+str(tablename))rowcount=cursor.fetchone()# 获取表占用空间 KBcursor.execute("SELECT TABLE_USED_SPACE( '"+schemaname+"', '"+str(tablename)+"') * PARA_VALUE / 1024 FROM V$DM_INI WHERE PARA_NAME = 'GLOBAL_PAGE_SIZE'")tabletotalsize=cursor.fetchone()# 获取表使用空间 KBcursor.execute("SELECT TABLE_USED_PAGES( '"+schemaname+"', '"+str(tablename)+"') * PARA_VALUE / 1024 FROM V$DM_INI WHERE PARA_NAME = 'GLOBAL_PAGE_SIZE'")tableusedsize=cursor.fetchone()queryresult[tablename]=(rowcount[0],int(tabletotalsize[0]),int(tableusedsize[0]))# 关闭连接cursor.close()conn.close()savename='tableinfo.json'print(queryresult)save_data={"dict_count":len(queryresult),"data":{key:list(value)forkey,valueinqueryresult.items()}}withopen(savename,'w',encoding='utf-8')asf:json.dump(save_data,f,indent=4,ensure_ascii=False)

运行上述程序,保存第一次的数据库表信息,然后向数据库表中插入数据,再次运行程序保存第二次数据,如下图所示,可以看出前后两次的数据库表变化,后续学习并测试如何通过程序自动比较前后两次的数据库表信息变化。

参考文献:
[1]https://eco.dameng.com/community/post/20241218072309WHQAOUSCT4WRAEQYOX
[2]https://vip.kingdee.com/knowledge/616295238575048448?productLineId=8&isKnowledge=2&lang=zh-CN

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 10:38:04

对比分析常见数字调制在SDR中的表现差异

探索SDR中的调制艺术:从BPSK到OFDM,谁更适合你的无线场景?在一间堆满开发板和天线的实验室里,一位工程师正盯着GNU Radio的瀑布图发愁——信号明明发出去了,接收端却总是一团噪声。他换了一个调制方式,重新…

作者头像 李华
网站建设 2026/4/16 10:42:29

SAM 3工业检测实战:缺陷识别分割系统部署

SAM 3工业检测实战:缺陷识别分割系统部署 1. 引言:工业视觉检测的智能化演进 在现代制造业中,产品质量控制对自动化和精度的要求日益提升。传统基于规则或传统图像处理的缺陷检测方法面临泛化能力差、适应性弱等挑战。随着基础模型技术的发…

作者头像 李华
网站建设 2026/4/16 12:23:26

XPipe终极指南:重新定义服务器管理的新范式

XPipe终极指南:重新定义服务器管理的新范式 【免费下载链接】xpipe Your entire server infrastructure at your fingertips 项目地址: https://gitcode.com/GitHub_Trending/xp/xpipe 在当今复杂的IT基础设施环境中,如何高效管理分散在不同网络环…

作者头像 李华
网站建设 2026/4/12 16:14:51

Open3D-ML终极安装配置指南:零基础快速部署3D机器学习环境

Open3D-ML终极安装配置指南:零基础快速部署3D机器学习环境 【免费下载链接】Open3D-ML An extension of Open3D to address 3D Machine Learning tasks 项目地址: https://gitcode.com/gh_mirrors/op/Open3D-ML 想要快速上手Open3D-ML进行3D机器学习开发吗&a…

作者头像 李华
网站建设 2026/4/16 12:23:03

Vue拖拽布局终极指南:5分钟快速上手vue-grid-layout

Vue拖拽布局终极指南:5分钟快速上手vue-grid-layout 【免费下载链接】vue-grid-layout A draggable and resizable grid layout, for Vue.js. 项目地址: https://gitcode.com/gh_mirrors/vu/vue-grid-layout 想要快速构建现代化仪表板、内容管理系统或可视化…

作者头像 李华
网站建设 2026/4/16 13:06:55

LLM成本失控危机:如何构建智能预算防御体系实现高效降本

LLM成本失控危机:如何构建智能预算防御体系实现高效降本 【免费下载链接】langfuse Open source observability and analytics for LLM applications 项目地址: https://gitcode.com/GitHub_Trending/la/langfuse 当你看到LLM账单从月初的几百美元暴涨到月末…

作者头像 李华