学习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文件内,主要程序如下所示:

python 复制代码
import dmPython
import json

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()
for table in tables:
    tablename=str(table[0])
    
    # 获取表中数据总数
    cursor.execute("select count(1) from "+str(tablename))
    rowcount =cursor.fetchone()

    # 获取表占用空间 KB
    cursor.execute("SELECT TABLE_USED_SPACE( '"+schemaname+"', '"+str(tablename)+"') * PARA_VALUE / 1024 FROM V$DM_INI WHERE PARA_NAME = 'GLOBAL_PAGE_SIZE'")    
    tabletotalsize =cursor.fetchone()

    # 获取表使用空间 KB
    cursor.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) for key, value in queryresult.items()}
        }
        
with open(savename, 'w', encoding='utf-8') as f:
    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

相关推荐
杜子不疼.2 分钟前
2026 GitHub 热门 Python 项目:AI 代理与数据工具精选
人工智能·python·github
迷藏4945 分钟前
# 发散创新:用Rust构建高性能分布式账本节点——从零实现共识算法与链上数据存储
java·python·rust·共识算法·分布式账本
进击的小头11 分钟前
第21篇:BUCK变换器双环控制系统设计与参数整定调试实战
python·算法
智算菩萨11 分钟前
【Tkinter】3 Tkinter Button 控件深度解析:从事件绑定到现代交互设计实战
python·microsoft·ui·交互·tkinter·button
小陈工11 分钟前
2026年3月30日技术资讯洞察:AI算力突破、云原生优化与架构理性回归
开发语言·人工智能·python·云原生·架构·数据挖掘·wasm
我是大猴子12 分钟前
JAVA面试问题
开发语言·python
zero159713 分钟前
Python 8天极速入门笔记(大模型工程师专用):第四篇-判断与循环(Python流程控制,批量处理必备)
笔记·python·ai编程
Ulyanov23 分钟前
雷达电子战仿真引擎设计与实现系列(三):信号处理与目标检测
python·tkinter·系统仿真·雷达电子战
Ricky_Theseus25 分钟前
探索群体智慧:蚁群算法(ACO)从原理到实践——python实现
python·算法·机器学习
Hello.Reader27 分钟前
PySpark 依赖管理集群环境下如何分发 Python 包
开发语言·python