一直想整理,比较懒没有做,今天恰好不太忙,整理下。
最早在做数据词典的时候,都是按着数据库手敲,非常累而且低效,后来了解到有pdm可以用,用过一段时间,但是由于它需要一些配置,有时候做出来还是要二次加工,也是比较麻烦,相对于手敲要好很多。
现在python用的比较熟练,结合mysql查询数据库表结构语句,用起来非常舒服。
查询数据库表结构语句如下:
show full FIELDS from world.country
运行结果如下:
可以查出表结构,field为字段名称,type为类型,collation为字符集,null为是否可为空,key表示是否是主键或外键,default表示默认值,extra暂不清楚,privileges暂不清楚,comment为注释,这样我的数据词典就很容易写了,只需要借助python进行简单处理生成word文件即可。
如何查询某字段不为空可根据系统表information_schema查询:
SELECT table_schema, table_name, column_name from information_schema.columns where table_name = 'country' and is_nullable='NO' and table_schema = 'world'
运行结果如下:
用来查询数据库表结构这两个语句应该是够用了。才疏学浅,只是个人的一点见解,欢迎各位大佬批评指正。
下附python生成数据库词典代码, 由于连接数据库相关操作比较敏感我都封装过了,这里仅展示后续操作。
from db_opt import getcursor
import docx
_author_ = 'luwt'
_date_ = '2018/12/17 13:42'
get_cursor = getcursor.GetCursor()
conn = get_cursor.get_native_conn()
cursor = conn.cursor()
table_names_sql = 'show tables'
cursor.execute(table_names_sql)
table_names = cursor.fetchall()
doc_new = docx.Document()
for table_name_tuple in table_names:
table_name = table_name_tuple[0]
# 查出表对象信息
table_infos_sql = 'show full fields from {};'.format(table_name)
cursor.execute(table_infos_sql)
table_info = cursor.fetchall()
doc_new.add_paragraph('\n')
doc_new.add_paragraph('表{}'.format(table_name), style='List Number')
# Table Grid可以实现表格线框为实线
table = doc_new.add_table(1, 6, style='Table Grid')
cells = table.rows[0].cells
cells[0].text = '字段名'
cells[1].text = '数据类型'
cells[2].text = '允许为空'
cells[3].text = '是否为主键'
cells[4].text = '默认值'
cells[5].text = '注释'
for column_info in table_info:
# column_info[0]字段名 column_info[1]字段类型
# column_info[3]字段允许空值 column_info[4]字段是否为主键或索引
# column_info[5]字段默认值 column_info[8]字段注释
# print("字段名=>{},字段类型=>{},字段是否允许为空=>{},"
# "字段是否为主键=>{},字段默认值=>{},字段注释=>{}".
# format(column_info[0], column_info[1],
# column_info[3], column_info[4],
# column_info[5], column_info[8]))
row_cells = table.add_row().cells
values = (column_info[0], column_info[1], column_info[3],
column_info[4], column_info[5], column_info[8]
)
for i in range(0, len(row_cells)):
if values[i]:
row_cells[i].text = values[i]
doc_new.save('D:\\test.docx')
[print(s.name) for s in doc_new.styles if s.type == 1]
今天更新了github,代码已上传,地址:https://github.com/xiqiuyimeng/mysql-database-dictionary