mysql查表结构语句

       一直想整理,比较懒没有做,今天恰好不太忙,整理下。

      最早在做数据词典的时候,都是按着数据库手敲,非常累而且低效,后来了解到有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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值