公司要将Django项目重构成Java项目,也就有了整理数据库文档的经历。。。。。。。

由于django从model迁移时没有将注释(也就是模型类中的verbose_name)写进mysql的表中,导致从MySQL导出的数据文件中没有注释。

想代码解决吧,查了一下,没有可参考的例子(没翻墙的情况下)。没办法,只能自己写了,毕竟模型类就在那里,它是跑不掉的,想办法把它揪出来就行了。话不多说,直接上代码

1、引入用到的工具包,反正csv可以直接转成Excel,而且python用它写入比用其它Excel依赖包要快

from django.apps import apps
import csv

2、需要导出的模块

apps_list = ['模块1', '模块2', '模块3', ...]  # 我只需要导出部分模块的表,django本身有不少表,项目基本没用它的表,而且项目引用了很多第三方依赖,不少依赖都产生了工具表,那些就也没必要
#如果需要导出全部的模块
#apps_list = [item for item in apps.all_models.keys()] # 这里可以得到所有的模块名称

3、嵌套循环模块下的表和字段,并对字段做处理

model_list = apps.get_models()  # 得到所有模型类名
f = open('数据表导出文件.csv', 'w', encoding='utf-8', newline='')
csv_writer = csv.writer(f)
for model in model_list:
for app in apps_list:
try:
db_model = apps.get_model(app, model._meta.object_name)
except Exception:
continue
table_name = db_model._meta.db_table # 表名
table_zh_name = db_model._meta.verbose_name # 获取表的中文名
csv_writer.writerow(['', table_name, table_zh_name])
csv_writer.writerow(["序号", "字段", "说明", '数据类型', '长度', '允许空', '关联表'])
fields = db_model._meta.fields
i = 0
for item in fields:
i += 1
name = item.name
max_length = item.max_length
null = '√' if item.null else '×'
relation_table_name = ''
field_type = item.description._proxy____args[0]
if field_type == 'Integer':
field_type = 'int'
elif field_type == 'Date (with time)':
field_type = 'datetime'
elif field_type == 'Date (without time)':
field_type = 'date'
elif field_type == 'Boolean (Either True or False)':
field_type = 'tinyint'
elif field_type == 'String (up to %(max_length)s)':
field_type = 'varchar'
elif field_type == 'Small integer':
field_type = 'smallint'
elif field_type == 'Floating point number':
field_type = 'double'
elif field_type == 'Foreign Key (type determined by related field)':
field_type = 'int'
elif field_type == 'Email address':
field_type = 'varchar'
if item.is_relation:
name = str(name) + '_id'
relation_table_name = item.related_model._meta.db_table
csv_writer.writerow([i, name, item.verbose_name, field_type, max_length, null, relation_table_name])
f.close()

点击一下, 一百多个表已报不到两秒钟就完事了,方便,简单,快捷。。。。

django 整理数据库文档时,从mysql导出的表中没有注释的解决方案的更多相关文章

  1. mysql 导出每张表中的100条数据..............

    windows下配好MYSQL 环境变量,cmd 然后: mysqldump -uroot -p123 [数据库名]--where "1=1 limit 100" --lock-a ...

  2. 【C#附源码】数据库文档生成工具支持(Excel+Html)

    [2015] 很多时候,我们在生成数据库文档时,使用某些工具,可效果总不理想,不是内容不详细,就是表现效果一般般.很多还是word.html的.看着真是别扭.本人习惯用Excel,所以闲暇时,就简单的 ...

  3. 基于Mybatis的Mysql数据库文档生成工具,支持生成docx(原创)

    今天不写android--也写写数据库相关的东西 -------------------- 今日老夫闲来无事,设计了一款数据库文档生成工具 眼下仅仅支持mysql 主要是生成docx的 下载链接:下载 ...

  4. “全能”选手—Django 1.10文档中文版Part1

    本文是博主翻译的Django1.10版本官方文档的第一部分,如时间充裕,争取一直翻译下去,经验不足,或有错漏,敬请指正. 另外对于公开文档进行翻译的版权问题不是很清楚,如有侵权请联系我! 另外,要转载 ...

  5. Django 1.10文档中文版Part1

    目录 第一章.Django1.10文档组成结构1.1 获取帮助1.2 文档的组织形式1.3 第一步1.4 模型层1.5 视图层1.6 模板层1.7 表单1.8 开发流程1.9 admin站点1.10 ...

  6. 实用!一键生成数据库文档,堪称数据库界的Swagger

    本文收录在个人博客:www.chengxy-nds.top,技术资料共享,同进步 最近部门订单业务调整,收拢其他业务线的下单入口,做个统一大订单平台.需要梳理各业务线的数据表,但每个业务线库都有近百张 ...

  7. 基于数据库的自动化生成工具,自动生成JavaBean、自动生成数据库文档等(v4.1.2版)

            目录:            第1版:http://blog.csdn.net/vipbooks/article/details/51912143            第2版:htt ...

  8. 一键生成数据库文档,堪称数据库界的Swagger,有点厉害

    最近部门订单业务调整,收拢其他业务线的下单入口,做个统一大订单平台.需要梳理各业务线的数据表,但每个业务线库都有近百张和订单相关的表,挨个表一个一个字段的弄脑瓜子嗡嗡的. 为了不重复 CV 操作,抱着 ...

  9. DBCHM -最简单、最实用的数据库文档生成工具

    项目介绍 DBCHM 是一款数据库文档生成工具! 该工具从最初支持chm文档格式开始,通过开源,集思广益,不断改进,又陆续支持word.excel.pdf.html.xml.markdown等文档格式 ...

随机推荐

  1. TensorFlow保存、加载模型参数 | 原理描述及踩坑经验总结

    写在前面 我之前使用的LSTM计算单元是根据其前向传播的计算公式手动实现的,这两天想要和TensorFlow自带的tf.nn.rnn_cell.BasicLSTMCell()比较一下,看看哪个训练速度 ...

  2. 1 - Apache HttpClient 简单使用

    Apache HttpClient 是Apache 开源的实现Http协议的java开源库. HttpClien 是客户端的HTTP通信实现库,实现HTTP GET 和POST请求,获取响应内容. A ...

  3. python在办公时能给我们带来什么?

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:谦睿科技教育 PS:如有需要Python学习资料的小伙伴可以加点击下方 ...

  4. Daily Scrum 12/21/2015

    Process: Zhaoyang: Integrate the oxford Speech API Code to the IOS client and do some UI optimizatio ...

  5. Pet BFS

    一天早上小明醒来时发现他的宠物仓鼠不见了. 他在房间寻找但是没找到仓鼠. 他想用奶酪诱饵去找回仓鼠. 他把奶酪诱饵放在房间并且等待了好几天. 但是可怜的小明除了老鼠和蟑螂没见到任何东西. 他找到学校的 ...

  6. Springboot:员工管理之查询员工列表(十(6))

    构建员工controller com\springboot\controller\EmployeeController.java package com.springboot.controller; ...

  7. 解决Typecho Gravatar头像加载缓慢的问题

    前言 Typecho评论默认使用的是Gravatar头像,但因为Gravatar网站总是被墙,导致页面加载被拖慢,而且加载半天也还是个裂图,太影响心情,所以我们可以不使用Gravatar头像,换成另一 ...

  8. wget下载整个网站---比较实用--比如抓取Smarty的document

    wget下载整个网站可以使用下面的命令 wget -r -p -k -np http://hi.baidu.com/phps, -r 表示递归下载,会下载所有的链接,不过要注意的是,不要单独使用这个参 ...

  9. 算法笔记刷题1(codeup 1934)

    准备6月份的拼题甲级中(本来现在这两天就考试了,但是因为疫情的原因延期了) 刚刚开始按算法笔记刷题,今天是探索codeup的第一天. 一开始并没有把多点测试当回事,直到一错再错,心态爆炸... 附上我 ...

  10. Jetson AGX Xavier更换apt-get源

    使用apt-get安装时,会很慢,更换了国内的源后,就可以解决这个问题了. 1. 备份sources.list文件 sudo cp /etc/apt/sources.list /etc/apt/sou ...