导出mysql库的中所有表的结构信息

【PHPWord】实战篇-获取数据全部表和表结构并导出Word文件 在实际的业务需求中,我们经常需要拿到数据库的全部表名,展示在后台中或者输出到文件里。由于文档的结构比较简单,并且没有严格的格式限制,这里我们使用创建文档的方式生成文件。 阅读详情
#coding: utf-8
#author: Alien
#date  : 2019年1月17日

import pymysql, re, xlsxwriter, os

ROW_IDX = 0

class MySQLHelper(object):

    def __init__(self, host, port, user, passwd, db_name=None):
        
        self.conn = pymysql.connect(host=host, port=port, user=user, passwd=passwd,
                        db=db_name, cursorclass = pymysql.cursors.DictCursor, autocommit=True)
        self.cur = self.conn.cursor()

    def __del__(self):
        self.cur.close()
        self.conn.close()
        
    def execute(self, sql):
        self.cur.execute(sql)
        res = self.cur.fetchall()
        if not res: res = []
        return res

class ExportTableInfo(object):

    def __init__(self, host, port, user, passwd, db_name):
        self.db = MySQLHelper(host, port, user, passwd, db_name)
        self.we = WriteExcel('%s.xlsx' % db_name)
        self.add_title(['表名', '表注释', '字段名', '字段类型', '字段注释'])
        
        table_names = self.get_all_table_name()
        
        all_table_info_list = []
        for table_name in table_names:
            sql = self.get_create_table_sql(table_name)
            all_table_info_list.append(self.get_comment(sql))
            print('从数据库读取 "%s.%s"的表结构成功!' % (db_name, table_name))
            
        for table_info in all_table_info_list:
            for field_dict in table_info['field']:
                desc = field_dict['desc'] if 'desc' in field_dict else ''
                self.add_field_info(['', '', field_dict['name'], field_dict['type'], desc])
                
            desc = table_info['desc'] if 'desc' in table_info else ''
            print('开始写入表信息: %s %s' % (table_info['name'], desc))
            self.add_table_name_desc(table_info['name'], desc, table_info['field_count'])
            
        self.we.save()
        
    def add_title(self, rows):
        font_format = {
            'bold':  True,    #字体加粗
            'bg_color': 'yellow',
            'font_size' : 14,
            'font_name' : '微软雅黑'
        }
        
        self.we.write_rows(rows, font_format)
        
    def add_table_name_desc(self, name, desc, count):
        font_format = {
            'font_color': 'red',   #单元格背景颜色
            'font_size' : 13,
            'font_name' : '微软雅黑',
            'align' : 'center',#水平居中
            'valign' :'vcenter',#垂直居中
        }

        end_row = ROW_IDX - 1
        start_row = ROW_IDX - count
        cell_format = self.we.create_format(font_format)
        self.we.merge_range(start_row, 0, end_row, 0, name, cell_format)
        self.we.merge_range(start_row, 1, end_row, 1, desc, cell_format)

    def add_field_info(self, rows):
        font_format = {
            'font_size' : 13,
            'font_name' : '微软雅黑'
        }
        
        self.we.write_rows(rows, font_format)

    def get_all_table_name(self):
        dict_list = self.db.execute('show tables')
        table_names = []
        for dict_items in dict_list:
            for key in dict_items:
                table_names.append(dict_items[key])
        return table_names
    
    def get_create_table_sql(self, table_name):
        res = self.db.execute('show create table %s' % table_name)
        create_table_sql = res[0]['Create Table']
        return create_table_sql
        
    def get_comment(self, create_table_sql):
        table_dict = {}
        field_list = []
        field_count = 0
        
        for line in create_table_sql.split('\n'):
            if 'CREATE TABLE' in line:
                table_dict['name'] = re.compile('`(.*)`').findall(line)[0]
            
            elif re.compile("COMMENT=\'(.*)'").search(line):
                table_dict['desc'] = re.compile("COMMENT=\'(.*)'").findall(line)[0]
                
            elif re.compile('^`').search(line.strip()):
                
                field_dict = {}
                line = line.replace(',', ' ,')
                field_match_list = re.compile('\s*(.*?)\s').findall(line)
                
                field_dict['name'] = field_match_list[0].replace('`', '')
                field_dict['type'] = field_match_list[1]
                if 'COMMENT' in field_match_list:
                    comment_idx = field_match_list.index('COMMENT') + 1
                    field_dict['desc'] = field_match_list[comment_idx].replace("'", '')
                field_list.append(field_dict)
                field_count += 1
        
        table_dict['field'] = field_list
        table_dict['field_count'] = field_count
        
        return table_dict    
            
class WriteExcel():
    def __init__(self, file_name):
        if os.path.exists(file_name):
            os.remove(file_name)
        self.workbook = xlsxwriter.Workbook(file_name)
        
        self.worksheet = self.workbook.add_worksheet('sheet 1')
        self.row_num = 0
        
        self.file_name = file_name
        self.max_col_num = 0
        
    #格式
    def create_format(self, format_dict):
        new_format = self.workbook.add_format(format_dict)
        return new_format
        
    #合并单元格
    def merge_range(self, first_row, first_col, last_row, last_col, data, cell_format=None):
        self.worksheet.merge_range(first_row, first_col, last_row, last_col, data,  cell_format)
        
    #写一行
    def write_rows(self, rows=[], format_dict=None):
        global ROW_IDX
        
        col_num = len(rows)
        if col_num != 0:
            for col_idx in range(0, col_num):
                text = rows[col_idx]
                if not text: continue
                self.worksheet.write(ROW_IDX, col_idx, text, self.create_format(format_dict))
                
        if col_num > self.max_col_num: self.max_col_num = col_num
        
        ROW_IDX += 1
    
    def save(self):
        self.worksheet.set_column(0, self.max_col_num, 40)   #设置单元格宽度
        self.workbook.close()
        print('写入成功')
        
if __name__ == '__main__':
    ExportTableInfo('localhost', 3306, 'root', '', 'test')
    
    

 

导出数据库表结构 可以很快的导出所用数据库所有表的表结构(包括是否为主键,注释) 立即下载

相关推荐

走马观碑组智能车竞赛:目标板识别算法优化与实战技巧(基于OpenCV)

本文针对智能车竞赛走马观碑组别的核心挑战,深入探讨了基于OpenCV的目标板识别算法优化与实战技巧。文章系统分析了PVC赛道环境下的光照、运动模糊等干扰因素,详细拆解了从红色矩形定位、透视校正到特征提取与分类的完整流程,并提供了工程优化、速度提升及现场调试的实用策略,旨在帮助参赛队伍构建一套在高速运动中既准又快的鲁棒识别系统。

life6的博客 733

MySql之MySql导出表结构

通过执行查询语句获取表结构信息,然后导出查询结果 SELECT TABLE_NAME 表名, COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DATA_TYPE 字段类型, CHARACTER_MAXIMUM_LENGTH 长度, IS_NULLABLE 是否为空, COLUMN_DEFAULT 默认值, COLUMN_COMMENT 备注 FROM INFORMATION_SCHEMA.COLUMNS WHERE -- 对应的数据库 table_schema = 'pig' --

weixin_42414567的博客 8027

FastAPI + React:现代 Web 前后端分离开发的全栈实践指南

• 部署:CI/CD 双流水线,前端 push → GitHub Actions → Cloudflare Pages;• 后端:分层结构 routers → services → repositories → models,单测覆盖率 90 %。• 接口缓存:Redis + FastAPI Depends 实现接口级缓存,读 QPS 提升至 5 k。• 前端:BFF 由 React Query 代理,统一缓存、重试、分页。GET /items/{id} 详情。,前端同学无需等 Mock 即可联调。

未来已来,AI时代,学AI编程,做AI量化,就来大鹏AI教育。 1494

Mysql导出(多张表)表结构及表数据 mysqldump用法

【代码】Mysql导出(多张表)表结构及表数据 mysqldump用法。

Andy12306的博客 3071

浅析ArcGis中的软件——ArcMap、ArcScene、 ArcGlobe、ArcCatalog

ArcMap:是集空间数据显示、矢量数据编辑、冲突数据检查(拓扑检查)、查询检索(地理编码)、统计(字段属性表)、报表生成、空间分析(ArcGIS Spatial Analyst)和高级制图(制图表达)等众多功能干一体的桌面应用平台软件。而且提供所见即所得的符号编辑器,令用户可以随心所欲地生成任意复杂的点、线、面符号。所支持的空间数据格式包括Arclnfo coverages、ESRI shapefiles、ArcSDE lavers、DXF、DWG、DGN、常见的图像格式、GRIDs、TINs等。

lxlmycsdnfree的博客 6566

【Clickhouse从入门到精通】第60篇:ClickHouse生态总结与未来展望

ClickHouse系列收官总结 本文作为《ClickHouse从入门到精通》系列的第60篇收官之作,系统回顾了整个系列的知识体系。文章从基础概念到高级应用,全面梳理了ClickHouse的核心技术: 知识体系:完整回顾了60篇文章的知识图谱,包括列式存储原理、MergeTree引擎家族、分布式架构等核心内容 生态工具:详细盘点了ClickHouse的企业版工具、运维监控、数据集成和可视化方案 版本演进:分析了从21.x到24.x的主要版本特性升级 未来趋势:展望了向量化引擎、湖仓一体、AI集成等发展方向

xyghehehehe的专栏 442

MySQL 使用命令行导出导出数据库、数据表、表结构

MySQL 使用命令行导出导出数据库、数据表、表结构

Chon.Wang 6万+

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决

pgsql数据库通过备份数据库文件进行还原时,如果表中有自增序列,还原后可能会出现重复的序列,此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。还原数据库时把序列取消勾选,选择不还原序列。因为还原表的同时,会自动将自增序列还原上去,此处勾选会导致数据库重复创建序列。点击还原数据库完毕后,可以看到序列仅有一个,没有出现重复序列。但此时的序列当前值是从1开始的,需要重置。点击菜单“其它”-》“序列”,可以看到有多个重复序列。

奋斗鱼 1043

mysql获取所有的表结构及备注

根据库名导出所有表信息: SELECT * FROM information_schema.`TABLES` WHERE TABLE_SCHEMA = 'vipaos_center' 根据库名导出所有表名及表备注: SELECT TABLE_NAME, TABLE_COMMENT FROM information_schema.`TABLES` WHERE TABLE_SCHEMA = 'db_name'; mysql获取整个哭的所有表,及表结构:

阳水平的博客 8479

Android车载音频系统概览

官网有些部分的内容描述比较简单,对没有app、系统和底层开发经验,容易一眼扫过,没有留意到相关细节。 本节补充车载音频相关细节。

hwj的博客 785

SiC MOSFET 失效机制详解

TDDB 指在相对较低电场(通常接近或略高于器件工作电压)下,长时间施加电压导致介电层(如栅氧化物)逐渐退化并最终击穿的现象。与即时击穿(Immediate Breakdown,由强电场直接引起)不同,TDDB 是时间相关的渐进过程,通常发生在数小时、几天甚至数年之后。核心过程:在 MOSFET 中,栅极与衬底之间施加电压时,电子通过量子隧道效应(Tunneling)注入介电层,形成缺陷或陷阱。这些缺陷积累,最终在介电层中形成导电路径(Conductive Path),导致短路和器件失效。统计特性。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 382

Mysql、Dm8达梦数据库通过脚本导出指定库所有表的结构详情信息到

在当今复杂多变的数据环境中,数据库作为信息存储与管理的核心,其重要性不言而喻。随着业务的不断拓展和深化,对于数据库表结构的理解与管理成为了确保数据一致性和准确性的关键。特别是在跨数据库系统的场景下,如何高效地获取并对比不同数据库中的表字段详情,成为了众多开发者与数据管理员面临的一大挑战。目标描述为了满足这一迫切需求,我们特此整理了MySQL和DM8(达梦数据库8)的表字段详情导出方案。MySQL,作为开源数据库领域的佼佼者,以其灵活性和广泛的社区支持而深受欢迎;

小码农吗 1282

AI Agent在智能腰带中的姿势矫正与提醒

随着人们生活方式的改变,长时间不正确的坐姿、站姿等不良姿势问题日益普遍,这不仅会导致身体疲劳,还可能引发颈椎病、腰椎病等多种健康问题。智能腰带作为一种可穿戴设备,具有实时监测人体姿势的潜力。本研究的目的是将AI Agent引入智能腰带,实现对人体姿势的准确识别、矫正与提醒功能。本研究的范围涵盖了从AI Agent的核心算法原理到智能腰带的实际开发与应用。包括传感器数据的采集与处理、机器学习算法的选择与训练、智能腰带的硬件设计与软件开发,以及在不同场景下的实际应用测试。本文共分为十个部分。

AI 原生应用开发的博客 344

navcat for mysql 导出表结构 打印mysql库中 所有表名 decimal-Java-金额

mysql mysql 的 decimal 这个是专门处理金额值的,Java 类型对应BigDecimal decimal 长度默认-10 小数点-2 打印mysql库中 所有表名: select table_name from information_schema.tables where table_schema='当前数据库' 导出: 右击表名...

洪君的博客 709

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

mysql 数据字典导出_MySQL导出数据字典

平时用mysql比较多,有时候需要详细的数据库设计表结构和数据字典,但又没有最新的文档,这个时候直接从数据导出是最新最全的。在MySQL数据库中利用information_schema库中的COLUMNS表可以快速生成数据字典文档,其实MySQL内部对表结构进行了存储,只需找到对应的存储表导出。Navicat中的导出功能实现快速导出数据字典,首先查看该表的表结构,再根据实际需要导出查询结果。查询指...

weixin_31304817的博客 3122

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

mysql快速查询表的结构和注释,字段等信息

本文使用的数据库连接工具为Navicat Premium 12 开发中难免会遇到需要导出某一个表的结构信息,字段信息或者注释信息,接下介绍一种快速查询以及导出的方式: mysql所承建的所有表都保存在information_schema这个库里,而所有的字段都在columns 这张表里面,所以想查啥就去看对应的字段就行。 select COLUMN_NAME 列名, DATA_TYPE 字段类...

ratel的博客 4713

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

mysqldump导出表结构和表数据和存储过程和函数

mysql 导出表结构和存储过程

qq_25096749的博客 664

[工具备忘]JAVA获取MYSQL数据库表结构、字段信息

产品让给出数据库的结构信息,excel表格形式如下: 写了一个临时工具,核心sql为 SELECT TABLE_NAME,TABLE_COMMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA=(SELECT DATABASE()) SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=(SELECT DATABASE()) 使用了hutool的集合工具类与excel工具类,代码如

啾啾头号大粉丝打工买粮博客 4087

php 导出mysql 结构_使用PHPExcel导出数据库表结构及内容

导出表结构:mysql> desc user ;+----------+--------------+------+-----+---------------------+----------------+| Field | Type | Null | Key | Default | Extra |+----------+---...

weixin_39619478的博客 208

Python实现Mysql数据字典导出

使用Python实现导出Mysql整库表或选定部份表,导出文件为Excel,包含一个目录记录表信息,各个单表sheet,支持目录超链接跳转至各sheet。

MR_Cyq_Miracle的博客 1801

导出mysql数据库表结构文档

导出mysql数据库表结构文档

weixin_47766381的博客 1230

【小工具】mysql表导出csv的使用

mysql导出csv的使用

kingtok的博客 656

Python生成数据库中所有表的的字典(execl)

Python生成数据库中所有表的的字典(execl)

没事别学JAVA 409

mysql查询拼接insert_MySQL 拼接Insert批量同步异构表数据

MySQL 拼接Insert批量同步异构表数据发布时间:2020-08-18 01:45:12来源:ITPUB博客阅读:111作者:静以致远√团团需求:线上部分表数据需要同步到测试环境,但是测试环境表结构又有变更,额外添加需求:原线上和测试都有的表字段同步,其他不同的字段不用同步,置为NULL即可。思路:首先导出线上表数据到测试的test库,考虑到两边表结构有变更,只能使用insert tab1(...

weixin_39611308的博客 424

java 代码 导出表结构生成doc文档(支持MySQL,Oracle)

java 代码 导出表结构生成doc文档(支持MySQL,Oracle)

qq_30272167的博客 761
上一篇: 解决0x80240013
下一篇: unittest+selenium实现断言失败截图
AlienLiang
博客等级 码龄14年 7粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值