当前位置: 首页 > article >正文

使用python 一键生成,PGSQL的数据字典

直接上代码#!/usr/bin/env python3 # -*- coding: utf-8 -*- PostgreSQL 数据字典生成器 (Python 3.11) 生成完全离线的 HTML 文件可直接双击在浏览器中打开。 import psycopg2 import datetime import os import sys from typing import List, Dict, Any # 数据库配置请根据实际情况修改 DB_CONFIG { host: 127.0.0.1, port: 5432, database: postgres, user: postgres, password: postgres } def get_tables_and_comments(conn) - List[Dict[str, str]]: 获取 public 模式下所有用户表及其注释 with conn.cursor() as cur: cur.execute( SELECT t.table_name, obj_description(c.oid, pg_class) AS table_comment FROM information_schema.tables t JOIN pg_class c ON c.relname t.table_name WHERE t.table_schema public AND t.table_type BASE TABLE ORDER BY t.table_name; ) return [ {TABLE_NAME: row[0], TABLE_COMMENT: row[1] or } for row in cur.fetchall() ] def get_columns_info(conn, table_name: str, table_schema: str public) - List[Dict[str, Any]]: 获取指定表的所有列详细信息 with conn.cursor() as cur: # 获取列注释使用 pg_* 系统表查询 cur.execute( SELECT a.attname, COALESCE(col_description(a.attrelid, a.attnum), ) FROM pg_catalog.pg_attribute a JOIN pg_catalog.pg_class c ON c.oid a.attrelid JOIN pg_catalog.pg_namespace n ON n.oid c.relnamespace WHERE n.nspname %s AND c.relname %s AND a.attnum 0 AND NOT a.attisdropped ORDER BY a.attnum; , (table_schema, table_name)) comments {row[0]: row[1] for row in cur.fetchall()} # 获取列基本信息 cur.execute( SELECT c.column_name, c.data_type, c.column_default, c.is_nullable, CASE WHEN c.column_default LIKE nextval(%% THEN TRUE ELSE FALSE END AS is_auto_increment FROM information_schema.columns c WHERE c.table_schema %s AND c.table_name %s ORDER BY c.ordinal_position; , (table_schema, table_name)) columns [] for row in cur.fetchall(): if row is None: continue col_name row[0] if len(row) 0 else columns.append({ COLUMN_NAME: col_name, COLUMN_TYPE: row[1] if len(row) 1 else , COLUMN_DEFAULT: row[2] if len(row) 2 else , IS_NULLABLE: row[3] if len(row) 3 else NO, IS_AUTO_INCREMENT: row[4] if len(row) 4 else False, COLUMN_COMMENT: comments.get(col_name, ) }) return columns def generate_offline_html(tables: List[Dict], db_name: str) - str: 生成完整的离线 HTML 内容 # 表清单 - 使用百分比宽度自动适应页面 table_list_html table border1 cellspacing0 cellpadding5 stylewidth:100%;table-layout:fixed;\n table_list_html colgroupcol stylewidth:8%col stylewidth:25%col stylewidth:67%/colgroup\n table_list_html theadtrth序号/thth表名/thth功能说明/th/tr/thead\ntbody\n for idx, tbl in enumerate(tables, 1): table_list_html f trtd{idx}/tdtd{tbl[TABLE_NAME]}/tdtd{tbl[TABLE_COMMENT]}/td/tr\n table_list_html /tbody\n/table\n # 字段详情 detail_html for tbl in tables: detail_html table border1 cellspacing0 cellpadding5 stylewidth:100%;table-layout:fixed;\n detail_html colgroupcol stylewidth:15%col stylewidth:12%col stylewidth:15%col stylewidth:8%col stylewidth:8%col stylewidth:42%/colgroup\n comment_part f - {tbl[TABLE_COMMENT]} if tbl[TABLE_COMMENT] else detail_html f captionb表名{tbl[TABLE_NAME]}{comment_part}/b/caption\n detail_html thead\n trth字段名/thth数据类型/thth默认值/thth允许非空/thth自动递增/thth备注/th/tr\n /thead\n tbody\n for col in tbl.get(COLUMNS, []): nullable_display 是 if col[IS_NULLABLE] YES else 否 auto_inc_display 是 if col[IS_AUTO_INCREMENT] else - detail_html ( f tr ftd{col[COLUMN_NAME]}/td ftd{col[COLUMN_TYPE]}/td ftd{col[COLUMN_DEFAULT]}/td ftd{nullable_display}/td ftd{auto_inc_display}/td ftd{col[COLUMN_COMMENT]}/td f/tr\n ) detail_html /tbody\n/table\nbr/\n # 完整 HTML now datetime.datetime.now().strftime(%Y-%m-%d %H:%M:%S) return f!DOCTYPE html html langzh-CN head meta charsetutf-8 title{db_name} 数据字典/title style body {{ font-family: 宋体, SimSun, serif; font-size: 12pt; margin: 20px; background: white; color: black; }} h1 {{ text-align: center; color: black; margin-bottom: 15px; font-size: 16pt; }} .summary {{ text-align: center; color: #666666; margin-bottom: 20px; font-size: 11pt; }} table {{ border-collapse: collapse; margin-bottom: 20px; page-break-inside: avoid; word-wrap: break-word; }} caption {{ text-align: left; font-weight: bold; font-size: 12pt; color: black; padding: 6px 0; }} th, td {{ border: 1px solid #000000; padding: 5px 6px; text-align: left; vertical-align: top; font-size: 11pt; word-wrap: break-word; }} thead th {{ background-color: #E0E0E0; font-weight: bold; }} .footer {{ text-align: left; margin-top: 20px; color: #666666; font-size: 11pt; }} /style /head body h1{db_name} 数据字典/h1 p classsummary生成时间{now}/p {table_list_html} br/ {detail_html} p classfooter总共{len(tables)} 个数据表/p /body /html def main(): try: print( 正在连接 PostgreSQL 数据库...) with psycopg2.connect(**DB_CONFIG) as conn: tables get_tables_and_comments(conn) print(f✅ 成功获取 {len(tables)} 张表) total_cols 0 for tbl in tables: cols get_columns_info(conn, tbl[TABLE_NAME]) tbl[COLUMNS] cols total_cols len(cols) html_content generate_offline_html(tables, DB_CONFIG[database]) # 生成带时间戳的文件名 timestamp datetime.datetime.now().strftime(%Y%m%d_%H%M%S) output_file f{DB_CONFIG[database]}_数据字典_{timestamp}.html with open(output_file, w, encodingutf-8) as f: f.write(html_content) abs_path os.path.abspath(output_file) print(f 数据字典已生成) print(f 文件路径: {abs_path}) print(f 共 {len(tables)} 张表{total_cols} 个字段) print(\n 提示双击该 HTML 文件即可在浏览器中查看) except psycopg2.Error as e: print(f❌ 数据库错误: {e}) sys.exit(1) except Exception as e: print(f 程序异常: {e}) import traceback traceback.print_exc() sys.exit(1) if __name__ __main__: main()效果如下图所示

相关文章:

使用python 一键生成,PGSQL的数据字典

直接上代码#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ PostgreSQL 数据字典生成器 (Python 3.11) 生成完全离线的 HTML 文件,可直接双击在浏览器中打开。 """import psycopg2 import datetime import os import sys from t…...

实战指南:轻松掌握OpenHTMLtoPDF的Java PDF生成利器

实战指南:轻松掌握OpenHTMLtoPDF的Java PDF生成利器 【免费下载链接】openhtmltopdf An HTML to PDF library for the JVM. Based on Flying Saucer and Apache PDF-BOX 2. With SVG image support. Now also with accessible PDF support (WCAG, Section 508, PDF/…...

AI手势识别入门必看:MediaPipe彩虹骨骼版部署与使用常见问题全解答

AI手势识别入门必看:MediaPipe彩虹骨骼版部署与使用常见问题全解答 1. 快速了解MediaPipe彩虹骨骼版 1.1 什么是MediaPipe Hands模型 MediaPipe Hands是Google开发的一款轻量级手部关键点检测模型,能够在普通CPU上实现实时手势识别。它能够精准定位手…...

告别裸机while(1):用状态机+环形队列重构你的GD32F303按键驱动

告别裸机while(1):用状态机环形队列重构你的GD32F303按键驱动 在嵌入式开发中,按键处理看似简单,却暗藏玄机。许多开发者习惯在while(1)循环中直接轮询GPIO状态,这种"裸奔式"代码在简单场景下或许能勉强工作&#xff0c…...

避开这些坑!芯片验证中stimulus设计的5个常见误区(含testbench优化建议)

避开这些坑!芯片验证中stimulus设计的5个常见误区(含testbench优化建议) 在芯片验证的世界里,stimulus设计就像是给DUT(被测设计)准备的一场精心编排的考试。它不仅需要覆盖所有可能的"考题"&…...

MAI-UI-8B功能测评:视觉理解+动作规划,到底有多好用?

MAI-UI-8B功能测评:视觉理解动作规划,到底有多好用? 1. 重新定义GUI智能体:不只是聊天机器人 MAI-UI-8B的出现彻底改变了我们对AI智能体的认知。与市面上大多数只能进行文字对话的模型不同,它真正实现了"看得见…...

【工业级AIAgent平衡框架】:融合Bandit+RL+因果推断的四层自调节架构(附GitHub开源v2.3内测版)

第一章:AIAgent架构中的探索与利用平衡 2026奇点智能技术大会(https://ml-summit.org) 在自主智能体(AIAgent)的决策闭环中,探索(exploration)与利用(exploitation)并非静态权衡&am…...

VibeVoice镜像使用心得:25种音色实战,找到你的专属语音

VibeVoice镜像使用心得:25种音色实战,找到你的专属语音 1. 为什么你需要关注VibeVoice? 想象一下,你正在制作一个英文教学视频,需要一位发音标准的旁白;或者开发一个多语言客服系统,希望用自然…...

数据库凭证的安全管理

数据库凭证是任何组织中最重要的安全资产之一。当这些凭证落入不法之徒手中时,后果可能极其严重——从数据泄露到监管罚款,乃至声誉受损。掌握如何正确管理、存储和轮换这些凭证,对于维护安全的数据库环境至关重要。 了解密钥管理 密钥管理…...

计算机网络知识应用:优化Qwen-Image-Edit-F2P API的高并发访问架构

计算机网络知识应用:优化Qwen-Image-Edit-F2P API的高并发访问架构 想象一下,你刚部署好一个功能强大的Qwen-Image-Edit-F2P API服务,它能智能地编辑图片,比如换个背景、美化人像。一开始用户不多,一切运行顺畅。但突…...

Shadcn-Vue深度解析:为什么这个开源组件库正在改变Vue开发者的工作方式?

Shadcn-Vue深度解析:为什么这个开源组件库正在改变Vue开发者的工作方式? 【免费下载链接】shadcn-vue Vue port of shadcn-ui 项目地址: https://gitcode.com/gh_mirrors/sh/shadcn-vue 在当今快速发展的前端生态中,Vue开发者面临着组…...

5步掌握可视化页面构建器:Web Designer低代码设计工具完全指南

5步掌握可视化页面构建器:Web Designer低代码设计工具完全指南 【免费下载链接】web_designer 网页设计器图形化工具,通过拖拽组件进行页面排版和生成页面代码 项目地址: https://gitcode.com/gh_mirrors/we/web_designer Web Designer是一款基于Vue.js开发的…...

如何轻松退出Windows Insider计划?OfflineInsiderEnroll终极解决方案

如何轻松退出Windows Insider计划?OfflineInsiderEnroll终极解决方案 【免费下载链接】offlineinsiderenroll OfflineInsiderEnroll - A script to enable access to the Windows Insider Program on machines not signed in with Microsoft Account 项目地址: ht…...

PPTist:3分钟上手!免费开源在线PPT编辑器终极指南

PPTist:3分钟上手!免费开源在线PPT编辑器终极指南 【免费下载链接】PPTist PowerPoint-ist(/pauəpɔintist/), An online presentation application that replicates most of the commonly used features of MS PowerPoint, allo…...

从死守 Windows 到彻底 Mac 化:程序员一旦用了 Mac,真的很难再回去

从死守 Windows 到彻底 Mac 化:程序员一旦用了 Mac,真的很难再回去“以前一直用 Windows,不敢用 Mac,怕自己不习惯;但一旦用了 Mac,再也回不去 Windows。”这句话在程序员圈里,几乎已经成了一句…...

3大核心功能解析:League Akari如何让英雄联盟玩家效率提升300%

3大核心功能解析:League Akari如何让英雄联盟玩家效率提升300% 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari是一款…...

YOLOv8融合VMamba:目标检测性能跃升实战解析

1. 环境配置与依赖安装 在开始YOLOv8与VMamba的融合实验之前,我们需要先搭建好开发环境。这里我推荐使用Ubuntu 22.04系统配合Anaconda进行环境管理,实测下来这个组合最稳定。如果你用的是Windows系统,建议通过WSL2来运行Ubuntu环境&#xff…...

8大网盘直链解析工具终极指南:告别限速,轻松获取真实下载地址

8大网盘直链解析工具终极指南:告别限速,轻松获取真实下载地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中…...

终极指南:如何5分钟实现Cursor AI无限使用破解

终极指南:如何5分钟实现Cursor AI无限使用破解 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your trial requ…...

3大核心技术:cursor-free-vip突破AI编程助手限制的完整解决方案

3大核心技术:cursor-free-vip突破AI编程助手限制的完整解决方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached…...

终极游戏资源编辑指南:如何用ExtractorSharp轻松制作DNF补丁

终极游戏资源编辑指南:如何用ExtractorSharp轻松制作DNF补丁 【免费下载链接】ExtractorSharp Game Resources Editor 项目地址: https://gitcode.com/gh_mirrors/ex/ExtractorSharp 你是否曾经想要自定义游戏中的角色外观、武器特效或界面元素?E…...

海鸥派OpenEuler/海思SD3403/SS928算力开发板 从烧写到实战应用全流程解析

1. 开发板开箱与基础认知 第一次拿到海鸥派开发板时,我注意到这个巴掌大的小盒子藏着不少惊喜。包装盒里除了开发板本体,还贴心地配备了散热片、Type-C电源线和串口转接头。开发板正面最显眼的就是那颗海思SD3403芯片,旁边紧挨着的是SS928协处…...

D3KeyHelper终极指南:5分钟掌握暗黑3智能宏,游戏效率提升300%

D3KeyHelper终极指南:5分钟掌握暗黑3智能宏,游戏效率提升300% 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 如果你正在寻找…...

别再乱翻文件了!Windows应急响应高效排查术:快速定位Vulntarget中的恶意文件

Windows应急响应实战:三招精准定位Webshell的恶意文件 应急响应就像一场与时间赛跑的狩猎游戏。当服务器告警响起,面对成千上万的文件和日志条目,如何快速揪出攻击者留下的Webshell?传统方法往往让人陷入文件海洋中盲目翻找&#…...

WebSite-Downloader:Python整站下载神器实战指南

WebSite-Downloader:Python整站下载神器实战指南 【免费下载链接】WebSite-Downloader 项目地址: https://gitcode.com/gh_mirrors/web/WebSite-Downloader WebSite-Downloader是一款基于Python开发的高效网站整站下载工具,专为技术爱好者和实际…...

3步搞定全网资源下载:res-downloader智能下载器实战指南

3步搞定全网资源下载:res-downloader智能下载器实战指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 你是否经…...

AgentCPM-Report高效推理:Pixel Epic智识终端TextIteratorStreamer原理

AgentCPM-Report高效推理:Pixel Epic智识终端TextIteratorStreamer原理 1. 像素史诗智识终端概述 Pixel Epic智识终端是一款基于AgentCPM-Report大模型构建的研究报告辅助工具,它将传统AI工具的科研过程转化为像素RPG冒险体验。这款终端采用了独特的16…...

Stable Yogi Leather-Dress-Collection惊艳案例:多角度2.5D皮衣穿搭动态构图生成

Stable Yogi Leather-Dress-Collection惊艳案例:多角度2.5D皮衣穿搭动态构图生成 1. 项目核心能力展示 Stable Yogi Leather-Dress-Collection是一款基于Stable Diffusion技术的专业皮衣穿搭生成工具,能够快速创建高质量的2.5D动漫风格皮衣造型。这个工…...

别再只盯着温度降水!用ClimateAP挖掘AHM、NFFD这些隐藏气候指标,优化你的项目选址

解锁ClimateAP隐藏指标:用AHM、NFFD等专业数据重塑项目选址逻辑 当风电场的叶片因极端低温频繁停转,当光伏板在积雪覆盖下发电量骤降,当生态修复项目的苗木因水分失衡大面积死亡——这些看似突发的"黑天鹅"事件,往往能在…...

字节Agent开发岗一面真实经历:小白必看!掌握这些核心考点,提升大模型面试成功率[特殊字符]

字节Agent开发岗一面真实经历:小白必看!掌握这些核心考点,提升大模型面试成功率🔥 本文分享了字节Agent开发岗校招一面真实经历,揭示因只知概念不知底层逻辑和工程实现而被面试官连环追问的困境。文章详细解析ReAct框架…...