From dbba1649d902891478f91716fac6d8405c3e3d1d Mon Sep 17 00:00:00 2001 From: "ningfucheng001@ke.com" Date: Wed, 21 Nov 2018 11:50:03 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=9B=B4=E6=96=B0=EF=BC=8C=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=89=B9=E9=87=8Fsql=E7=94=9F=E6=88=90markdown?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AutoBuildRunClass.py | 54 ++++++++++++++++++++++++++++++++++++++++ FileParserClass.py | 10 ++++---- MarkdownBuildClass.py | 9 +++---- build.py | 57 +++++++------------------------------------ 4 files changed, 72 insertions(+), 58 deletions(-) create mode 100644 AutoBuildRunClass.py diff --git a/AutoBuildRunClass.py b/AutoBuildRunClass.py new file mode 100644 index 0000000..d19f333 --- /dev/null +++ b/AutoBuildRunClass.py @@ -0,0 +1,54 @@ +# -*- coding:utf-8 -*- +import os.path + +from FileParserClass import FileParser +from MarkdownBuildClass import MarkDownBuild + + +class AutoBuildRun: + + def __init__(self): + pass + + def run(self, dir): + md_dir = './md/' + content = '' + file = '' + try: + file = open(dir) + except IOError, e: + exit(e) + try: + content = file.read() + except: + exit('文件读取失败') + finally: + file.close() + + file_parser = FileParser() + # 将文件分离为每张表 + table_list = file_parser.separatTable(content) + # 解析出表中表名及表详情 + table_name = file_parser.parserTableName(table_list) + # 解析出每张表字段情况并与表名表详情组合 + table_data = file_parser.parserColumn(table_list, table_name) + + markdown_build = MarkDownBuild() + + text = markdown_build.buildMarkdown(table_data) + file_name = os.path.basename(dir).split('.')[0] + '.md' + # 写文件 + file_obj = '' + try: + file_obj = open(md_dir + file_name, 'w') + except: + exit('文件创建失败') + + try: + file_obj.write(text) + except: + exit('文件写入失败') + finally: + file_obj.close() + + print '数据库>>'+dir+'<<文档已经成功创建,文件在md目录下.' diff --git a/FileParserClass.py b/FileParserClass.py index b46fcdc..b813040 100644 --- a/FileParserClass.py +++ b/FileParserClass.py @@ -1,16 +1,17 @@ # -*- coding:utf-8 -*- import re + + class FileParser: def __init__(self): pass - # 定义分离SQL文件匹配模式 # table_pattern = r'CREATE TABLE([\s\S]*?)LOCK TABLES' #分离表 table_pattern = r'CREATE TABLE([\s\S]*?);' - name_pattern = r'.*?`(.*?)`.*?' # 获取表名称或字段名称 - table_content_pattern = r'COMMENT=\'(.*?)\'' #获取表详情 + name_pattern = r'.*?`(.*?)`.*?' # 获取表名称或字段名称 + table_content_pattern = r'COMMENT=\'(.*?)\'' # 获取表详情 def separatTable(self, content): '''将SQL文件中各个表分离开来 @@ -89,11 +90,10 @@ def parserColumn(self, table_list, table_name): else: column_comment = '' - # if '\'' in tmp_list[-1]: # column_comment = tmp_list[-1][1:-2] # else: # column_comment = '' column_tmp.append([column_name, column_type, column_comment]) table_data.append([table_name[i], column_tmp]) - return table_data \ No newline at end of file + return table_data diff --git a/MarkdownBuildClass.py b/MarkdownBuildClass.py index fe70f2a..0283d9c 100755 --- a/MarkdownBuildClass.py +++ b/MarkdownBuildClass.py @@ -1,6 +1,5 @@ # -*- coding:utf-8 -*- class MarkDownBuild: - table_header = '|字段名称|字段类型|字段含义|\n|:---:|:---:|:---:|\n' table_content_template = '|%s|%s|%s|\n' @@ -9,15 +8,15 @@ def __init__(self): def buildMarkdown(self, table_data): text = '# 数据库文档\n\n' - text += '\n\n## 数据表列表\n\n' + text += '\n\n## 数据表列表\n\n' for table in table_data: text = text + '* [' + table[0][0] + '(' + table[0][1] + ')](#' + table[0][0] + '_pointer)\n\n' text += '\n\n## 数据表说明\n\n' for table in table_data: - text = text + '\n\n' - text = text + '* ' + table[0][0] + '表(' + table[0][1] + ')[↑](#返回顶部)\n\n' + text = text + table[0][0] + '\n\n' + text = text + '* ' + table[0][0] + '表(' + table[0][1] + ')\n\n' text += self.table_header for column in table[1]: text = text + '|' + column[0] + '|' + column[1] + '|' + column[2] + '|\n' text += '\n' - return text \ No newline at end of file + return text diff --git a/build.py b/build.py index 298315a..1a4322b 100644 --- a/build.py +++ b/build.py @@ -1,56 +1,17 @@ # -*- coding:utf-8 -*- -# Author : 我才是二亮 (unstring@163.com) -import sys, os.path -from FileParserClass import FileParser -from MarkdownBuildClass import MarkDownBuild +# Author : luck +import sys -if __name__ == '__main__': +from AutoBuildRunClass import AutoBuildRun - md_dir = './md/' +if __name__ == '__main__': - content = '' - file = '' - if (len(sys.argv) < 2): + if len(sys.argv) < 2: exit('请输入SQL文件路径') - dir = sys.argv[1] - try: - file = open(dir) - except IOError, e: - exit(e) - try: - content = file.read() - except: - exit('文件读取失败') - finally: - file.close() - - file_parser = FileParser() - # 将文件分离为每张表 - table_list = file_parser.separatTable(content) - # 解析出表中表名及表详情 - table_name = file_parser.parserTableName(table_list) - # 解析出每张表字段情况并与表名表详情组合 - table_data = file_parser.parserColumn(table_list, table_name) - - markdown_build = MarkDownBuild() - - text = markdown_build.buildMarkdown(table_data) - file_name = os.path.basename(dir).split('.')[0] + '.md' - # 写文件 - file_obj = '' - try: - file_obj = open(md_dir + file_name, 'w') - except: - exit('文件创建失败') - - try: - file_obj.write(text) - except: - exit('文件写入失败') - finally: - file_obj.close() - - print '数据库文档已经成功创建,文件在md目录下.' + autoBuildRun = AutoBuildRun() + argvNum = sys.argv.__len__() - 1 + for i in range(1,sys.argv.__len__()): + autoBuildRun.run(sys.argv[i]) From 0655b6da875b0b03415d923dbe7698fe0ccd82e8 Mon Sep 17 00:00:00 2001 From: luckcheng <909891736@qq.com> Date: Wed, 21 Nov 2018 13:15:53 +0800 Subject: [PATCH 2/2] Update README.md --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f1ccd14..09bda4b 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,8 @@ 2. 从数据库中导出sql文件,请尽量导出只有表结构无表数据的sql文件 -3. 在项目目录下运行: -`python build.py sql_dir` +3. 在项目目录下运行,多个sql文件空格分隔: +`python build.py sql_dir.sql sql_dir_1.sql sql_dir_2.sql` 其中sql_dir为您的sql文件路径 4. 生成成功的md文件,在项目的md文件夹中,文件名同您的sql文件名 - -[示例](http://blog.2liang.me/2016/03/06/%E4%BD%BF%E7%94%A8SQL%E6%96%87%E4%BB%B6%E8%87%AA%E5%8A%A8%E7%94%9F%E6%88%90%E6%95%B0%E6%8D%AE%E5%BA%93%E6%96%87%E6%A1%A3/)