Skip to content

Commit 4d69def

Browse files
author
cuizhongyi
committed
'update数据字典'
1 parent e571510 commit 4d69def

File tree

5 files changed

+126
-3
lines changed

5 files changed

+126
-3
lines changed
Binary file not shown.

自动生成数据库表字典的markdown文本/mysql_dictionary.py renamed to 自动生成数据库表字典的markdown文本/data_dict_config.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
"""
55
自动生成MySQL数据表的数据字典支持多个
6+
代码直接配置数据库连接信息,免输入
67
author: gxcuizy
78
date: 2020-04-30
89
"""
@@ -84,11 +85,12 @@ def deal_file(self, file_name):
8485

8586
# 程序执行入口
8687
if __name__ == '__main__':
87-
dd = DataDict()
88-
table_s = input('请输入数据库完整表名,如多个表名请用英文逗号分隔(关闭请输入q):')
88+
# 输入数据表名称
89+
table_s = input('请输入数据库表名(例如:t_order),如需输入多个表名请用英文逗号分隔(例如:t_order,t_goods),结束使用请输入q:')
8990
while table_s != 'q':
91+
dd = DataDict()
9092
dd.run(table_s)
91-
table_s = input('继续使用请输入数据库完整表名,如多个表名请用英文逗号分隔(关闭请输入q):')
93+
table_s = input('继续使用请输入数据库表名(例如t_order),如需输入多个表名请用英文逗号分隔(例如t_order,t_goods),结束使用请输入q):')
9294
else:
9395
print('谢谢使用,再见……')
9496
time.sleep(1)
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
4+
"""
5+
自动生成MySQL数据表的数据字典支持多个
6+
自动数据数据库连接信息,方便多用
7+
author: gxcuizy
8+
date: 2020-04-30
9+
"""
10+
11+
import pymysql
12+
import os
13+
import time
14+
15+
16+
class DataDict(object):
17+
def __init__(self, connect_info):
18+
# 数据库连接配置
19+
self.host_name = connect_info[0]
20+
self.user_name = connect_info[1]
21+
self.pwd = connect_info[2]
22+
self.db_name = connect_info[3]
23+
self.folder_name = 'mysql_dict'
24+
25+
def run(self, table_str):
26+
"""脚本执行入口"""
27+
try:
28+
# 创建一个连接
29+
conn = pymysql.connect(self.host_name, self.user_name, self.pwd, self.db_name)
30+
# 用cursor()创建一个游标对象
31+
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
32+
except Exception:
33+
print('数据库连接失败,请检查连接信息!')
34+
exit(1)
35+
table_list = table_str.split(',')
36+
for table_name in table_list:
37+
# 判断表是否存在
38+
sql = "SHOW TABLES LIKE '%s'" % (table_name,)
39+
cursor.execute(sql)
40+
result_count = cursor.rowcount
41+
if result_count == 0:
42+
print('%s数据库中%s表名不存在,无法生成……' % (self.db_name, table_name))
43+
continue
44+
# 表注释获取
45+
print('开始生成表%s的数据字典' % (table_name,))
46+
sql = "show table status WHERE Name = '%s'" % (table_name,)
47+
cursor.execute(sql)
48+
result = cursor.fetchone()
49+
table_comment = result['Comment']
50+
# 文件夹和文件处理
51+
file_path = self.folder_name + os.sep + table_name + '.md'
52+
self.deal_file(file_path)
53+
# 打开文件,准备写入
54+
dict_file = open(file_path, 'a', encoding='UTF-8')
55+
dict_file.write('#### %s %s' % (table_name, table_comment))
56+
dict_file.write('\n | 字段名称 | 字段类型 | 默认值 | 字段注释 |')
57+
dict_file.write('\n | --- | --- | --- | --- |')
58+
# 表结构查询
59+
field_str = "COLUMN_NAME,COLUMN_TYPE,COLUMN_DEFAULT,COLUMN_COMMENT from information_schema.COLUMNS"
60+
sql = "select %s where table_schema='%s' and table_name='%s'" % (field_str, self.db_name, table_name)
61+
cursor.execute(sql)
62+
fields = cursor.fetchall()
63+
for field in fields:
64+
column_name = field['COLUMN_NAME']
65+
column_type = field['COLUMN_TYPE']
66+
column_default = str(field['COLUMN_DEFAULT'])
67+
column_comment = field['COLUMN_COMMENT']
68+
info = ' | ' + column_name + ' | ' + column_type + ' | ' + column_default + ' | ' + column_comment + ' | '
69+
dict_file.write('\n ' + info)
70+
# 关闭连接
71+
print('完成表%s的数据字典' % (table_name,))
72+
dict_file.close()
73+
cursor.close()
74+
conn.close()
75+
76+
def deal_file(self, file_name):
77+
"""处理存储文件夹和文件"""
78+
# 不存在则创建文件夹
79+
if not os.path.exists(self.folder_name):
80+
os.mkdir(self.folder_name)
81+
# 删除已存在的文件
82+
if os.path.isfile(file_name):
83+
os.unlink(file_name)
84+
85+
def test_conn(self, conn_info):
86+
"""测试数据库连接"""
87+
try:
88+
# 创建一个连接
89+
pymysql.connect(conn_info[0], conn_info[1], conn_info[2], conn_info[3])
90+
return True
91+
except Exception:
92+
return False
93+
94+
95+
# 程序执行入口
96+
if __name__ == '__main__':
97+
# 数据数据连接信息
98+
conn_info = input('请输入mysql数据库连接信息(格式为:主机IP,用户名,登录密码,数据库名),逗号分隔且输入顺序不能乱,例如:192.168.0.1,root,root,test_db:')
99+
conn_list = conn_info.split(',')
100+
while conn_info == '' or len(conn_list) != 4:
101+
conn_info = input('请正确输入mysql数据库连接信息(格式为:主机IP,用户名,登录密码,数据库名),逗号分隔且输入顺序不能乱,例如:192.168.0.1,root,root,test_db:')
102+
conn_list = conn_info.split(',')
103+
# 测试数据库连接问题
104+
dd_test = DataDict(conn_list)
105+
db_conn = dd_test.test_conn(conn_list)
106+
while db_conn == False:
107+
conn_info = input('请正确输入mysql数据库连接信息(格式为:主机IP,用户名,登录密码,数据库名),逗号分隔且输入顺序不能乱,例如:192.168.0.1,root,root,test_db:')
108+
conn_list = conn_info.split(',')
109+
if len(conn_list) != 4:
110+
continue
111+
dd_test = DataDict(conn_list)
112+
db_conn = dd_test.test_conn(conn_list)
113+
# 输入数据表名称
114+
table_s = input('请输入数据库表名(例如:t_order),如需输入多个表名请用英文逗号分隔(例如:t_order,t_goods),结束使用请输入q:')
115+
dd = DataDict(conn_list)
116+
while table_s != 'q':
117+
dd.run(table_s)
118+
table_s = input('继续使用请输入数据库表名(例如t_order),如需输入多个表名请用英文逗号分隔(例如t_order,t_goods),结束使用请输入q):')
119+
else:
120+
print('谢谢使用,再见……')
121+
time.sleep(1)
Binary file not shown.

0 commit comments

Comments
 (0)