不会吧,不会吧,不会还有人手写数据库说明文档吧? 使用go几行代码轻松导出数据库word文档
Posted jiangxiaoju
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不会吧,不会吧,不会还有人手写数据库说明文档吧? 使用go几行代码轻松导出数据库word文档相关的知识,希望对你有一定的参考价值。
原创不易,未经允许,请勿转载。
先放上Github连接 https://github.com/jiang4869/gen-database-doc ,欢迎star、fork
文中数据库操作使用的是gorm
框架,word操作使用的是https://github.com/carmel/gooxml
这个库
首先获取数据库中所有表的表名
func GetTables() []string
var tables []string
db.Raw("show tables").Scan(&tables)
return tables
封装一个实体类用来接受表的字段信息
type Result struct
ColumnName string `gorm:"column:COLUMN_NAME"` // 字段名
ColumnType string `gorm:"column:COLUMN_TYPE"` // 字段类型
IsNullable string `gorm:"column:IS_NULLABLE"` // 是否为空
ColumnKey string `gorm:"column:COLUMN_KEY"` // 字段键
ColumnComment string `gorm:"column:COLUMN_COMMENT"` // 字段注释
通过表明来获取表的字段信息。conf.DataSource.Dbname
为数据库名
func GetTableInfo(tableName string) []Result
results := make([]Result, 0)
db.Raw("select column_name,column_type,is_nullable,column_key, column_comment from information_schema.columns where table_schema =? and table_name = ?",conf.DataSource.Dbname, tableName).Scan(&results)
return results
把表字段信息写入word中
type Writer struct
doc *document.Document
func NewWriter() *Writer
doc := document.New()
return &Writerdoc: doc
func (w *Writer) WriterTable(tableName string, tableInfo []Result)
// 写入表名
w.doc.AddParagraph().AddRun().AddText(tableName)
// 添加一个表格
table := w.doc.AddTable()
// width of the page
table.Properties().SetWidthPercent(100)
// with thick borers
borders := table.Properties().Borders()
borders.SetAll(wml.ST_BorderSingle, color.Auto, measurement.Zero)
row := table.AddRow()
row.AddCell().AddParagraph().AddRun().AddText("字段编号")
row.AddCell().AddParagraph().AddRun().AddText("字段名")
row.AddCell().AddParagraph().AddRun().AddText("字段类型")
row.AddCell().AddParagraph().AddRun().AddText("是否为空")
row.AddCell().AddParagraph().AddRun().AddText("字段键")
row.AddCell().AddParagraph().AddRun().AddText("备注")
for idx, val := range tableInfo
row = table.AddRow()
row.AddCell().AddParagraph().AddRun().AddText(fmt.Sprintf("%d", idx+1))
row.AddCell().AddParagraph().AddRun().AddText(val.ColumnName)
row.AddCell().AddParagraph().AddRun().AddText(val.ColumnType)
row.AddCell().AddParagraph().AddRun().AddText(val.IsNullable)
row.AddCell().AddParagraph().AddRun().AddText(val.ColumnKey)
row.AddCell().AddParagraph().AddRun().AddText(val.ColumnComment)
w.doc.AddParagraph()
func (w *Writer) Save(fileName string) error
return w.doc.SaveToFile(fileName)
func main()
tables := GetTables()
writer := NewWriter()
for _, tableName := range tables
results := GetTableInfo(tableName)
writer.WriterTable(tableName, results)
writer.Save(fmt.Sprintf("%s.docx",conf.DataSource.Dbname))
拒绝白嫖从一键三连开始!
原创不易,未经允许,请勿转载。
以上是关于不会吧,不会吧,不会还有人手写数据库说明文档吧? 使用go几行代码轻松导出数据库word文档的主要内容,如果未能解决你的问题,请参考以下文章