mysql 数据表导出为 markdown(附 go 语言 gorm 的实际使用)

前言

通常业务系统开发中,数据库的设计与维护是至关重要的环节。而数据库的文档化则是确保团队成员之间有效沟通、快速理解系统架构的基础。

但目前数据文档都是手动写的,耗时费力,由于当前项目使用的是 mysql 作为存储引擎,找找看有没有比较好用的工具,发现了一个比较契合的 mysql_markdown

mysql_markdown 的使用

可以直接上 GitHub 上下载源码,自行编译。

快速使用

# 帮助
➜  mysql_markdown -h
flag needs an argument: -h
Usage: mysql_markdown [options...]
--help  This help text
-h      host.     default 127.0.0.1
-u      username. default root
-p      password. default root
-d      database. default mysql
-P      port.     default 3306
-c      charset.  default utf8
-o      output.   default current location
-t      tables.   default all table and support ',' separator for filter, every item can use regexp
-l      language. default cn,support: cn,en

# 使用
➜ mysql_markdown -p 123456 -d test
connecting to MySQL to export markdown document file.
 100% |█████████████████████████████████████████████████████████████████████████████████████| (1/1, 394 it/s)
convert to document finished in test_20241122_103043.md

go gorm 生成表/字段描述

使用过 gorm 的,对于生成数据库字段描述应该不陌生,只需要在对应的结构体上添加 tag 即可,如下:

type User struct {
	Name string `gorm:"comment:姓名"`
	Age  int    `gorm:"comment:年龄"`
}

生成表的描述信息,注意:gorm 没有提供类似 TableName 设置表名的方式来设置描述,得用 gorm:table_options 来设置,如果不是新建的表,这种设置方式也不能生效。

db.Set("gorm:table_options", "COMMENT '用户表'").AutoMigrate(&User{})

实际例子

package main

import (
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"log"
	"os"
)

type User struct {
	Name string `gorm:"comment:姓名"`
	Age  int    `gorm:"comment:年龄"`
}

func (User) TableName() string {
	return "user"
}

func getLocalTestDb() (db *gorm.DB, err error) {
	newLogger := logger.New(log.New(os.Stderr, "\r\n", log.LstdFlags), logger.Config{
		LogLevel:                  logger.Info,
		IgnoreRecordNotFoundError: true,
		Colorful:                  true,
	})
	db, err = gorm.Open(mysql.New(mysql.Config{
		DSN: "root:123456@tcp(127.0.0.1:3306)/test",
	}), &gorm.Config{Logger: newLogger, CreateBatchSize: 1000})
	return
}

func main() {
	db, err := getLocalTestDb()
	if err != nil {
		log.Fatal(err)
	}

	db = db.Debug()

	// gorm:table_options 会在创建 table 的语句后添加相关的语句,不是新建的表不能生效
	err = db.Set("gorm:table_options", "COMMENT '用户表'").AutoMigrate(&User{})
	if err != nil {
		log.Fatal(err)
	}

	log.Println("OK")
}

程序输出

2024/11/22 10:23:08 main.go:41
[0.000ms] [rows:-] SELECT DATABASE()

2024/11/22 10:23:08 main.go:41
[5.769ms] [rows:1] SELECT SCHEMA_NAME from Information_schema.SCHEMATA where SCHEMA_NAME LIKE 'test%' ORDER BY SCHEMA_NAME='test' DESC,SCHEMA_NAME limit 1

2024/11/22 10:23:08 main.go:41
[2.575ms] [rows:-] SELECT count(*) FROM information_schema.tables WHERE table_schema = 'test' AND table_name = 'user' AND table_type = 'BASE TABLE'

2024/11/22 10:23:09 main.go:41
[49.289ms] [rows:0] CREATE TABLE `user` (`name` longtext COMMENT '姓名',`age` bigint COMMENT '年龄')COMMENT '用户表'
2024/11/22 10:23:09 OK

使用 mysql_markdown 工具导出 md 文档

mysql_markdown -p 123456 -d test

可见文档内容如下:

## test tables message
#### 1、 user
用户表

| 序号 | 名称 | 描述 | 类型 || 为空 | 额外 | 默认值 |
| :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: |
| 1 | `name` | 姓名 | longtext |  | YES |  |  |
| 2 | `age` | 年龄 | bigint |  | YES |  |  |

参考

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值