python生成数据库中所有表的DESC描述

在数据库设计完成之后, 常常需要在 wiki 或其他文档中保存一份数据库中所有表的 desc 描述, 尤其是每个字段的含义和用途。 手动去生成自然是不可取的。 因此, 我编写了一个简单的 python 程序,可以自动生成数据库中所有表的 desc 描述, 并以可读格式输出。

# -*- coding: utf-8 -*-
# -------------------------------------------------------------------------------
# Name:          db_tables_descs.py
# Purpose:       generate the tables that describe the meanings of fields in db
#
# Author:       qin.shuq
#
# Created:      2014/11/17
# Output:       desc.txt
#               recording the tables that describe the meanings of fields in db
#-------------------------------------------------------------------------------
#!/usr/bin/env python

import MySQLdb

globalFieldDescs = (‘Field‘, ‘Type‘, ‘Null‘, ‘Key‘, ‘Default‘, ‘Extra‘)

globalDescFile = ‘desc.txt‘

conflictedWithMysqlKeywords = set([‘group‘])

fieldDescMapping = {
    ‘id‘:         ‘唯一标识‘,
    ‘is_deleted‘: ‘是否逻辑删除‘,
    ‘status‘:     ‘实体状态‘,
    ‘type‘:       ‘实体类型‘,
    ‘priority‘:   ‘优先级‘,
    ‘password‘:   ‘密码‘,
    ‘ip‘:         ‘ip 地址‘,
    ‘mac‘:        ‘mac 地址‘,
    ‘protocol‘:   ‘访问协议‘,
    ‘user_id‘:    ‘用户唯一标识‘
}

class DB(object):

    def __init__(self):
        self.conn = MySQLdb.connect(db=‘mysql‘,host=‘127.0.0.1‘,user=‘root‘,passwd=‘123456‘)

    def obtainDB(self):
        return self

    def query(self, sql):
        cursor = self.conn.cursor()
        cursor.execute(sql)
        result =  cursor.fetchall()
        cursor.close()
        return list(result)

def formatCols(fieldDesc):
    return  "%-16s %-24s %-5s %-8s %-8s %-30s" % fieldDesc

def withNewLine(astr):
    return astr + ‘\n‘

def commonFieldsProcess(fieldDescList):
    fieldName = fieldDescList[0]
    fieldDesc = fieldDescMapping.get(fieldName)
    desclen =   len(fieldDescList)
    if fieldDesc is None:
        if fieldName.startswith(‘gmt_c‘):
            fieldDesc = ‘创建时间‘
        elif fieldName.startswith(‘gmt_m‘):
            fieldDesc = ‘修改时间‘
        else:
            fieldDesc = fieldDescList[desclen-1]
    fieldDescList[desclen-1] = fieldDesc

def formatF(fieldDescTuple):
    fieldDescList = list(fieldDescTuple)
    fieldLen = len(fieldDescList)
    for i in range(fieldLen):
        if fieldDescList[i] is None:
            fieldDescList[i] = ‘NULL‘
        else:
            fieldDescList[i] = str(fieldDescList[i])
    commonFieldsProcess(fieldDescList)
    return formatCols(tuple(fieldDescList))

def format(tableDesc):
    desc = ‘‘
    for fieldDescTuple in tableDesc:
        desc += withNewLine(formatF(fieldDescTuple))
    return desc

def descDb(givenDb):
    tablesRet = givenDb.query("show tables;")
    print tablesRet
    tableNames = [table[0] for table in tablesRet]
    desc = ‘‘
    for tablename in tableNames:
        if tablename in conflictedWithMysqlKeywords:
            tablename = ‘`‘ + tablename + ‘`‘
        descSql = "desc " + tablename
        tableDesc = givenDb.query(descSql)
        desc += withNewLine(tablename)
        desc += withNewLine(formatCols(globalFieldDescs)).decode(‘utf-8‘)
        desc += withNewLine(format(tableDesc)).decode(‘utf-8‘)
        desc += withNewLine(‘‘).decode(‘utf-8‘)
    return desc

def main():

    descFile = open(globalDescFile, ‘w‘)

    db = DB()
    database = db.obtainDB()
    desc = descDb(database)
    descFile.write(desc.encode(‘utf-8‘))

    descFile.close()

if __name__ == ‘__main__‘:
    main()
时间: 2024-10-04 05:37:40

python生成数据库中所有表的DESC描述的相关文章

获取SQL Server数据库中的表和字段描述

获取所有dbo表的扩展属性: SELECT * FROM fn_listextendedproperty (NULL, 'schema', 'dbo', 'table', default, NULL, NULL) 大概的结果: objtype objname name value TABLE 表名 扩展属性名 值 获取表的扩展属性: select * from ::fn_listextendedproperty (null,'user','dbo','table','表名','column',n

Code First添加一个现有数据库中的表

描述 刚刚使用EF,还没搞明白,遇到下面问题,记录一下. 都说EF好用,一直也没用过,以前写代码都是ADO.NET,写起来费时费力还没什么大进展,如果能把这些事简化一下把精力放到逻辑或者更有用的地方岂不是更好.所以想使用EF.Code First,从字面的意思来看是先有代码后有数据库,通过Model来创建数据库,好像只能是通过Model来生成数据库,至少我接触2天以来是这样,项目已经开始一段时间了,数据库已经有一定的数据,虽然是测试数据,但也不想删掉,从新添加数据也是很烦人的事.想找到一种能够不

计算数据库中各个表的数据量和每行记录所占用空间--添加架构信息-读后感及知识整理

参考文章: SQL Server 游标运用:查看一个数据库所有表大小信息(Sizes of All Tables in a Database) 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 监控SQLServer 数据库表每天的空间变化情况 仔细拜读上面三位的文章,不会的知识点又参考了MSDN,巩固了知识点如下: 知识点: 1.表的架构信息,涉及的系统对象 sys.schemas 和 INFORMATION_SCHEMA.TABLES,但后者不是官方推荐方式,

通过jdbc获取数据库中的表结构

通过jdbc获取数据库中的表结构 主键 各个表字段类型及应用生成实体类 1.JDBC中通过MetaData来获取具体的表的相关信息.可以查询数据库中的有哪些表,表有哪些字段,字段的属性等等.MetaData中通过一系列getXXX函数,将这些信息存放到ResultSet里面,然后返回给用户.关于MetaData的说明网上也有不少,这里我只是从我自身学习的角度来记录一下简单使用JDBC以及获取数据表相关信息的方法. DatabaseMetaData dbmd = con.getMetaData()

如何快速查看数据库中的表大小

exec sp_spaceused 以上语法可以查看数据库大小 以下可以查看数据库中每个表的数据条数 SELECT   a.name, b.rows FROM      sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.id WHERE   (a.type = 'u') AND (b.indid IN (0, 1)) ORDER BY b.rows DESC

清空SQL Server数据库中所有表数据的方法

其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入死循环,二是这里使用了微软未正式公开的sp_MSForEachTable存储过程. 也许很多读者朋友都经历过这样的事情:要在开发数据库基础上清理一个空库,但由于对数据库结构缺乏整体了解,在删除一个表的记录时,删除不了,因为可能有外键约束,一个常见的数据库结构是一个主表,一个子表,这种情况下一般都得先删除子表记录,再删除主表记录. 说道删除数据记录,

通过 jdbc 分析数据库中的表结构和主键外键

文章转自:http://ivan4126.blog.163.com/blog/static/20949109220137753214811/ 在某项目中用到了 hibernate ,大家都知道 hibernate 是 ORM 框架,他是有能力根据实体生成数据库表的.我们在单元测试的时候用到了 dbUnit ,dbUnit 可以帮助我们在测试前把数据库的测试数据准备好,然后我们就利用现成的数据库环境测试,测试完成后需将数据库中的所有数据清除(为了不影响其他的单元测试),然后接着下一个测试.虽然已经

查询SQLServer2005中某个数据库中的表结构、索引、视图、存储过程、触发器以及自定义函数

查询SQLServer2005中某个数据库中的表结构.索引.视图.存储过程.触发器以及自定义函数 2013-03-11 09:05:06|  分类: SQL SERVER|举报|字号 订阅 (1)查询SQLServer2005中某个数据库中的表结构 SELECT TOP 100 PERCENT --a.id,CASE WHEN a.colorder = 1 THEN d.name ELSE '' END AS 表名,CASE WHEN a.colorder = 1 THEN isnull(f.v

查询数据库中所有表的记录数,所占空间,索引使用空间

常用 --查询数据库中所有表的记录数,所占空间,索引使用空间 exec sp_MSForEachTable @precommand=N'create table ##(表名 sysname,记录数 int,保留空间 Nvarchar(20),使用空间 varchar(20),索引使用空间 varchar(20),未用空间 varchar(20))', @command1=N'insert ## exec sp_spaceused ''?''', @postcommand=N'select * f