django 整理数据库文档时,从mysql导出的表中没有注释的解决方案
公司要将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导出的表中没有注释的解决方案的更多相关文章
- mysql 导出每张表中的100条数据..............
windows下配好MYSQL 环境变量,cmd 然后: mysqldump -uroot -p123 [数据库名]--where "1=1 limit 100" --lock-a ...
- 【C#附源码】数据库文档生成工具支持(Excel+Html)
[2015] 很多时候,我们在生成数据库文档时,使用某些工具,可效果总不理想,不是内容不详细,就是表现效果一般般.很多还是word.html的.看着真是别扭.本人习惯用Excel,所以闲暇时,就简单的 ...
- 基于Mybatis的Mysql数据库文档生成工具,支持生成docx(原创)
今天不写android--也写写数据库相关的东西 -------------------- 今日老夫闲来无事,设计了一款数据库文档生成工具 眼下仅仅支持mysql 主要是生成docx的 下载链接:下载 ...
- “全能”选手—Django 1.10文档中文版Part1
本文是博主翻译的Django1.10版本官方文档的第一部分,如时间充裕,争取一直翻译下去,经验不足,或有错漏,敬请指正. 另外对于公开文档进行翻译的版权问题不是很清楚,如有侵权请联系我! 另外,要转载 ...
- 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 ...
- 实用!一键生成数据库文档,堪称数据库界的Swagger
本文收录在个人博客:www.chengxy-nds.top,技术资料共享,同进步 最近部门订单业务调整,收拢其他业务线的下单入口,做个统一大订单平台.需要梳理各业务线的数据表,但每个业务线库都有近百张 ...
- 基于数据库的自动化生成工具,自动生成JavaBean、自动生成数据库文档等(v4.1.2版)
目录: 第1版:http://blog.csdn.net/vipbooks/article/details/51912143 第2版:htt ...
- 一键生成数据库文档,堪称数据库界的Swagger,有点厉害
最近部门订单业务调整,收拢其他业务线的下单入口,做个统一大订单平台.需要梳理各业务线的数据表,但每个业务线库都有近百张和订单相关的表,挨个表一个一个字段的弄脑瓜子嗡嗡的. 为了不重复 CV 操作,抱着 ...
- DBCHM -最简单、最实用的数据库文档生成工具
项目介绍 DBCHM 是一款数据库文档生成工具! 该工具从最初支持chm文档格式开始,通过开源,集思广益,不断改进,又陆续支持word.excel.pdf.html.xml.markdown等文档格式 ...
随机推荐
- ffmpeg使用ss与t参数对视频进行剪辑
ffmpeg能够实现对视频进行剪辑操作,ss为指定视频剪切开头的起始时间,t制定视频的总长度,ss与t的单位均为:秒. ffmpeg -ss 7200 -i 1080p.mp4 -c copy -t ...
- 数论-质因数(gcd) UVa 10791 - Minimum Sum LCM
https://vjudge.net/problem/UVA-10791/origin 以上为题目来源Google翻译得到的题意: 一组整数的LCM(最小公倍数)定义为最小数,即 该集合的所有整数的倍 ...
- stand up meeting 12-2
今天因为各位组员组里项目原因没有集中在一起进行stand up meeting.但是士杰和天赋国庆分别对项目进度和前后端的结合进行的沟通. 针对后端部分,天赋完成了GetRankingData API ...
- sprint3总结 && sprint4计划
sprint3总结 在一周时间里,逻辑部分顺利的将数据库,查词,UI部分连接到一起.并且各部分也针对新的要求做出了一些修改,目前数据库和查词alpha版已经完成,UI部分还需要一些美化,逻辑部分也还需 ...
- 2019CCPC-江西省赛(重现赛)- 感谢南昌大学
A题: 题意: 给你两棵树,然后用一条边将这两棵树连接起来,然后计算 每两点之间的距离,然后求和,问这个和的最小值. 思路:根据重心的性质,树上的所有点到重心的距离最短,因此我们找到两棵树的重心,然后 ...
- Linux学习笔记(一)目录处理命令
目录处理命令 ls cd mkdir rmdir tree ls 英文原意: list 功能: 显示目录文件 语法: ls 选项[-ald] [文件或目录] ls -a 显示所有文件,包括隐藏文件 l ...
- 开源软件SoftEther使用
最近在寻找比较好用的开源VPN,感觉SoftEther很符合我的需求.一方面是SoftEther属于开源软件并且一直在更新,另一方面是功能强大,好用. VPN支持路由功能和NAT功能,还支持多种类型的 ...
- Linux系统安装docker教程-CentOS7(完美教程)
一.前言 最近有网友反应不在安装Linux 安装docker,为了方便大家更快的安装,以CentOS7安装为例,写了一篇比较简单的博客,让大家学习. 二.背景介绍 Linux,全称GNU/Linux ...
- 教你如何快速让浏览器兼容es6
写在正文前,本来这一节的内容应该放在第二节更合适,因为当时就有同学问ES6的兼容性如何,如何在浏览器兼容ES6的特性,这节会介绍一个抱砖引玉的操作案例. 为什么ES6会有兼容性问题? 由于广大用户使用 ...
- 微信网页授权报code been used, hints: [ req_id: XYv1Ha07042046 ]
先贴上代码: public function index() { $code = input('get.code'); $tool = new Wxtool(); if (empty($code)) ...