吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1451|回复: 10
收起左侧

[Python 原创] 一键导出MySQL数据字典表

[复制链接]
Reikoko 发表于 2023-11-19 21:32
import pymysql
import importlib,sys

header = {
        1:"TABLE_CATALOG",
        2:"TABLE_SCHEMA",
        3:"TABLE_NAME",
        4:"COLUMN_NAME",
        5:"ORDINAL_POSITION",
        6:"COLUMN_DEFAULT",
        7:"IS_NULLABLE",
        8:"DATA_TYPE",
        9:"CHARACTER_MAXIMUM_LENGTH",
        10:"CHARACTER_OCTET_LENGTH",
        11:"NUMERIC_PRECISION",
        12:"NUMERIC_SCALE",
        13:"DATETIME_PRECISION",
        14:"CHARACTER_SET_NAME",
        15:"COLLATION_NAME",
        16:"COLUMN_TYPE",
        17:"COLUMN_KEY",
        18:"EXTRA",
        19:"PRIVILEGES",
        20:"COLUMN_COMMENT",
        21:"GENERATION_EXPRESSION",
        22:"SRS_ID"
    }

def generate(database_name):

    importlib.reload(sys)

    conn = pymysql.connect(host='127.0.0.1', user='root', password='123456', db='database')
    cursor = conn.cursor()
    query = f"SELECT TABLE_NAME, TABLE_COMMENT FROM information_schema.TABLES WHERE table_type='BASE TABLE' AND TABLE_SCHEMA='{database_name}'"

    cursor.execute(query)
    tables = cursor.fetchall()

    markdown_table_header = """\n\n\n### {} ({}) \n| 序号 | 字段名称 | 数据类型 | 是否为空 | 是否为主键 | 字段说明 |\n| :--: |----| ---- | ---- | ---- | ---- |\n"""

    mysql_table_header=f"{header.get(5)},{header.get(4)},{header.get(16)},{header.get(7)},{header.get(17)},{header.get(20)}"

    markdown_table_row = "| " + " | ".join(["{}"] * len(mysql_table_header.split(','))) + " |"

    with open(f'{database_name}.md', 'w') as f:

        for table in tables:

            query = f"SELECT {mysql_table_header} FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='{database_name}' AND TABLE_NAME='{table[0]}'ORDER BY ORDINAL_POSITION"

            cursor.execute(query)

            tmp_table = cursor.fetchall()

            p = markdown_table_header.format(table[0], remove_newline(table[1]))

            for col in tmp_table:
                p += (remove_newline(markdown_table_row.format(*col)) + "\n")

            f.writelines(p)

def remove_newline(s):
    return s.replace('\n', '')

generate("database")


参考代码链接:
生成并导出MySQL数据字典-风静花犹落
风静花犹落GitHub

生成的MD文件编辑工具
[Linux/Windows]Typora 理论多版本兼容破解方案
https://www.52pojie.cn/thread-1710146-1-1.html
(出处: 吾爱破解论坛)

最终版本的代码由于mysql_table_header的自定义的全面性的需要,对于自定义的便捷性做了一定的取舍,希望大家多多包涵

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
blindcat + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Threesui + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
tl;dr 发表于 2023-11-20 06:25
提示: 作者被禁止或删除 内容自动屏蔽
blindcat 发表于 2023-11-20 07:17
sxwa059587 发表于 2023-11-20 08:18
yu520 发表于 2023-11-20 08:42
具体如何使用呀
hushxh 发表于 2023-11-20 09:14
不知道杂用啊
Carnival 发表于 2023-11-20 09:34
感谢分享,学习到了,确实很使用
NAXLCQ 发表于 2023-11-20 09:48
感谢分享 实用
ziaogiao 发表于 2023-11-20 09:49
感谢分享
flyclass 发表于 2023-11-20 09:54
谢谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 17:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表