广告
返回顶部
首页 > 资讯 > 数据库 >python 统计MySQL表信息
  • 256
分享到

python 统计MySQL表信息

信息pythonMySQL 2023-01-30 22:01:14 256人浏览 安东尼
摘要

线上有一台Mysql服务器,里面有几十个数据库,每个库有N多表。现在需要将每个表的信息,统计到excel中,格式如下:库名表名表说明建表语句db1users用户表CREATE TABLE `users` (...)怎么做呢?1. 手动录入(

线上有一台Mysql服务器,里面有几十个数据库,每个库有N多表。

现在需要将每个表的信息,统计到excel中,格式如下:

库名表名表说明建表语句
db1users用户表CREATE TABLE `users` (...)





怎么做呢?

1. 手动录入(太TM苦逼了,那么多表呀...)

2. 使用python自动录入(Great)

 

需要利用的技术点,有2个。一个是pymysql(连接mysql),一个是xlwt(写入excel)

安装模块

pip3 install pymysql xlwt


获取所有数据库

请确保有一个账号,能够远程连接MySQL,并且有对应的权限。

我用的是本机的MySQL,目前只有一个数据库db1

新建文件tj.py,内容如下:

import pymysql

conn = pymysql.connect(
    host="127.0.0.1",  # mysql ip地址
    user="root",
    passwd="",
    port=3306  # mysql 端口号,注意:必须是int类型
)

cur = conn.cursor()  # 创建游标

# 获取mysql中所有数据库
cur.execute('SHOW DATABASES')

data_all = cur.fetchall()  # 获取执行的返回结果
print(data_all)


执行输出:

(('infORMation_schema',), ('db1',), ('mysql',), ('performance_schema',), ('sys',))


结果是一个元组,里面的每一个元素也是元组。使用for循环

import pymysql

conn = pymysql.connect(
    host="127.0.0.1",  # mysql ip地址
    user="root",
    passwd="",
    port=3306  # mysql 端口号,注意:必须是int类型
)

cur = conn.cursor()  # 创建游标

# 获取mysql中所有数据库
cur.execute('SHOW DATABASES')

data_all = cur.fetchall()  # 获取执行的返回结果
# print(data_all)

for i in data_all:
    print(i[0])  # 获取库名



执行输出:

information_schema
db1
mysql
performance_schema
sys


获取所有的表

要获取所有的表,必须要切换到对应的数据库中,使用show tables 才可以获取。

import pymysql

conn = pymysql.connect(
    host="127.0.0.1",  # mysql ip地址
    user="root",
    passwd="",
    port=3306  # mysql 端口号,注意:必须是int类型
)

cur = conn.cursor()  # 创建游标

# 获取mysql中所有数据库
cur.execute('SHOW DATABASES')

data_all = cur.fetchall()  # 获取执行的返回结果
# print(data_all)

for i in data_all:
    conn.select_db(i[0])  # 切换到指定的库中
    cur.execute('SHOW TABLES')  # 查看库中所有的表
    ret = cur.fetchall()  # 获取执行结果
    print(ret)


执行输出:

(('CHARACTER_SETS',), ('COLLATIONS',), ('COLLATION_CHARACTER_SET_APPLICABILITY',), ('COLUMNS',), 
...


结果也是一个大的元组,使用for循环,提取表名

import pymysql

conn = pymysql.connect(
    host="127.0.0.1",  # mysql ip地址
    user="root",
    passwd="",
    port=3306  # mysql 端口号,注意:必须是int类型
)

cur = conn.cursor()  # 创建游标

# 获取mysql中所有数据库
cur.execute('SHOW DATABASES')

data_all = cur.fetchall()  # 获取执行的返回结果
# print(data_all)

for i in data_all:
    conn.select_db(i[0])  # 切换到指定的库中
    cur.execute('SHOW TABLES')  # 查看库中所有的表
    ret = cur.fetchall()  # 获取执行结果

    for j in ret:
        print(j[0])  # 获取每一个表名


执行输出:

CHARACTER_SETS
COLLATIONS
COLLATION_CHARACTER_SET_APPLICABILITY
COLUMNS
...


获取建表语句

使用命令 show create table 表名 获取

import pymysql

conn = pymysql.connect(
    host="127.0.0.1",  # mysql ip地址
    user="root",
    passwd="",
    port=3306  # mysql 端口号,注意:必须是int类型
)

cur = conn.cursor()  # 创建游标

# 获取mysql中所有数据库
cur.execute('SHOW DATABASES')

data_all = cur.fetchall()  # 获取执行的返回结果
# print(data_all)

for i in data_all:
    conn.select_db(i[0])  # 切换到指定的库中
    cur.execute('SHOW TABLES')  # 查看库中所有的表
    ret = cur.fetchall()  # 获取执行结果

    for j in ret:
        # 获取每一个表的建表语句
        cur.execute('show create table `%s`;' % j[0])
        ret = cur.fetchall()
        print(ret)


执行输出:

(('CHARACTER_SETS', "CREATE TEMPORARY TABLE `CHARACTER_SETS` (\n  `CHARACTER_SET_NAME` varchar(32) NOT NULL DEFAULT '',\n  `DEFAULT_COLLATE_NAME` varchar(32) NOT NULL DEFAULT '',\n  `DESCRIPTION` varchar(60) NOT NULL DEFAULT '',\n  `MAXLEN` bigint(3) NOT NULL DEFAULT '0'\n) ENGINE=MEMORY DEFAULT CHARSET=utf8"),)
...


从结果中可以看出,建表语句中有大量的 \n  这个是换行符。注意:是\n后面还有2个空格
领导肯定是不想看到有这种符号存在,怎么去除呢?使用eval+replace

import pymysql

conn = pymysql.connect(
    host="127.0.0.1",  # mysql ip地址
    user="root",
    passwd="",
    port=3306  # mysql 端口号,注意:必须是int类型
)

cur = conn.cursor()  # 创建游标

# 获取mysql中所有数据库
cur.execute('SHOW DATABASES')

data_all = cur.fetchall()  # 获取执行的返回结果
# print(data_all)

for i in data_all:
    conn.select_db(i[0])  # 切换到指定的库中
    cur.execute('SHOW TABLES')  # 查看库中所有的表
    ret = cur.fetchall()  # 获取执行结果

    for j in ret:
        # 获取每一个表的建表语句
        cur.execute('show create table `%s`;' % j[0])
        ret = cur.fetchall()
        # print(ret)
        for k in ret:
            # 替换反斜杠,使用\\。替换换行符\n,使用下面的
            structure = eval(repr(k[1]).replace('\\n  ', ''))
            print(structure)


执行输出:

CREATE TABLE "api_teacher" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" varchar(32) NOT NULL, "role" smallint NOT NULL, "title" varchar(64) NOT NULL, "signature" varchar(255) NULL, "image" varchar(128) NOT NULL, "brief" text NOT NULL);
CREATE TEMPORARY TABLE `CHARACTER_SETS` (`CHARACTER_SET_NAME` varchar(32) NOT NULL DEFAULT '',`DEFAULT_COLLATE_NAME` varchar(32) NOT NULL DEFAULT '',`DESCRIPTION` varchar(60) NOT NULL DEFAULT '',`MAXLEN` bigint(3) NOT NULL DEFAULT '0'
) ENGINE=MEMORY DEFAULT CHARSET=utf8
...


结果真的很多,但我都需要吗?no no no,其实我只需要db1而已,其他的都是系统自带的表,我并不关心!


排除多余的表

定义一个排序列表,使用if排除,注意:i[0] 是库名

import pymysql

conn = pymysql.connect(
    host="127.0.0.1",  # mysql ip地址
    user="root",
    passwd="",
    port=3306  # mysql 端口号,注意:必须是int类型
)

cur = conn.cursor()  # 创建游标

# 获取mysql中所有数据库
cur.execute('SHOW DATABASES')

data_all = cur.fetchall()  # 获取执行的返回结果
# print(data_all)

for i in data_all:
    # 排序列表,排除mysql自带的数据库
    exclude_list = ["sys", "information_schema", "mysql", "performance_schema"]
    if i[0] not in exclude_list:  # 判断不在列表中时
        conn.select_db(i[0])  # 切换到指定的库中
        cur.execute('SHOW TABLES')  # 查看库中所有的表
        ret = cur.fetchall()  # 获取执行结果

        for j in ret:
            # 获取每一个表的建表语句
            cur.execute('show create table `%s`;' % j[0])
            ret = cur.fetchall()
            # print(ret)
            for k in ret:
                # 替换反斜杠,使用\\。替换换行符\n,使用下面的
                structure = eval(repr(k[1]).replace('\\n  ', ''))
                print(structure)


执行输出:

CREATE TABLE `school` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
CREATE TABLE `users` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '姓名',PRIMARY KEY (`id`),KEY `ix_users_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表'


获取表说明

看下面一条建表语句

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '姓名',
  PRIMARY KEY (`id`),
  KEY `ix_users_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';


我需要获取 用户表 这3个字,如何操作?


1. 使用正则匹配?Oh, I'm sorry ,本人正则水平太烂了...
2. 使用COMMENT切割?那可不行,name字段也有COMMENT。
仔细发现,可以看出这2个COMMENT还是有区别的。最后一个COMMENT,后面有一个等号。
OK,那么就可以通过COMMENT=来切割了。


import pymysql

conn = pymysql.connect(
    host="127.0.0.1",  # mysql ip地址
    user="root",
    passwd="",
    port=3306  # mysql 端口号,注意:必须是int类型
)

cur = conn.cursor()  # 创建游标

# 获取mysql中所有数据库
cur.execute('SHOW DATABASES')

data_all = cur.fetchall()  # 获取执行的返回结果
# print(data_all)

for i in data_all:
    # 排序列表,排除mysql自带的数据库
    exclude_list = ["sys", "information_schema", "mysql", "performance_schema"]
    if i[0] not in exclude_list:  # 判断不在列表中时
        conn.select_db(i[0])  # 切换到指定的库中
        cur.execute('SHOW TABLES')  # 查看库中所有的表
        ret = cur.fetchall()  # 获取执行结果

        for j in ret:
            # 获取每一个表的建表语句
            cur.execute('show create table `%s`;' % j[0])
            ret = cur.fetchall()
            # print(ret)
            for k in ret:
                # 替换反斜杠,使用\\。替换换行符\n,使用下面的
                structure = eval(repr(k[1]).replace('\\n  ', ''))
                # 使用COMMENT= 切割
                res = structure.split("COMMENT=")
                print(res)


执行输出:

['CREATE TABLE `school` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci']
["CREATE TABLE `users` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '姓名',PRIMARY KEY (`id`),KEY `ix_users_name` (`name`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ", "'用户表'"]


注意: 有些表,是没有写表注释的,所以获取表说明时,要加一个判断

import pymysql

conn = pymysql.connect(
    host="127.0.0.1",  # mysql ip地址
    user="root",
    passwd="",
    port=3306  # mysql 端口号,注意:必须是int类型
)

cur = conn.cursor()  # 创建游标

# 获取mysql中所有数据库
cur.execute('SHOW DATABASES')

data_all = cur.fetchall()  # 获取执行的返回结果
# print(data_all)

for i in data_all:
    # 排序列表,排除mysql自带的数据库
    exclude_list = ["sys", "information_schema", "mysql", "performance_schema"]
    if i[0] not in exclude_list:  # 判断不在列表中时
        conn.select_db(i[0])  # 切换到指定的库中
        cur.execute('SHOW TABLES')  # 查看库中所有的表
        ret = cur.fetchall()  # 获取执行结果

        for j in ret:
            # 获取每一个表的建表语句
            cur.execute('show create table `%s`;' % j[0])
            ret = cur.fetchall()
            # print(ret)
            for k in ret:
                # 替换反斜杠,使用\\。替换换行符\n,使用下面的
                structure = eval(repr(k[1]).replace('\\n  ', ''))
                # 使用COMMENT= 切割,获取表说明
                res = structure.split("COMMENT=")

                if len(res) > 1:  # 判断有表说明的情况下
                    explain = res[1]  # 表说明
                    print(explain)


执行输出:

'用户表'


输出结果是带有引号的,要去除引号,怎么操作?
使用strip就可以了

import pymysql

conn = pymysql.connect(
    host="127.0.0.1",  # mysql ip地址
    user="root",
    passwd="",
    port=3306  # mysql 端口号,注意:必须是int类型
)

cur = conn.cursor()  # 创建游标

# 获取mysql中所有数据库
cur.execute('SHOW DATABASES')

data_all = cur.fetchall()  # 获取执行的返回结果
# print(data_all)

for i in data_all:
    # 排序列表,排除mysql自带的数据库
    exclude_list = ["sys", "information_schema", "mysql", "performance_schema"]
    if i[0] not in exclude_list:  # 判断不在列表中时
        conn.select_db(i[0])  # 切换到指定的库中
        cur.execute('SHOW TABLES')  # 查看库中所有的表
        ret = cur.fetchall()  # 获取执行结果

        for j in ret:
            # 获取每一个表的建表语句
            cur.execute('show create table `%s`;' % j[0])
            ret = cur.fetchall()
            # print(ret)
            for k in ret:
                # 替换反斜杠,使用\\。替换换行符\n,使用下面的
                structure = eval(repr(k[1]).replace('\\n  ', ''))
                # 使用COMMENT= 切割
                res = structure.split("COMMENT=")

                if len(res) > 1:
                    explain = res[1]  # 表说明
                    # print(explain)
                    explain_new = explain.strip("'")  # 去掉引号
                    print(explain_new)


执行输出:

用户表


接下来就需要将数据写入到excel中,但是,我们需要知道。写入excel,要不断的调整方位。
由于线上表众多,获取一次数据,需要几分钟时间,时间上耗费不起!
所以为了避免这种问题,需要将获取到的数据,写入JSON文件中。


构造json数据

既然要构造json数据,那么数据格式,要规划好才行!我构造的数据格式如下:

dic = {
    "库名":{
        'name': "库名", 'table_list': [
            {'tname':"表名",'structure':"建表语句",'explain':"表说明"}
        ]
    }
}



定义一个大字典,写入数据

import pymysql

conn = pymysql.connect(
    host="127.0.0.1",  # mysql ip地址
    user="root",
    passwd="",
    port=3306  # mysql 端口号,注意:必须是int类型
)

cur = conn.cursor()  # 创建游标

# 获取mysql中所有数据库
cur.execute('SHOW DATABASES')

data_all = cur.fetchall()  # 获取执行的返回结果
# print(data_all)

dic = {}  # 大字典,第一层
for i in data_all:
    if i[0] not in dic:  # 判断库名不在dic中时
        # 排序列表,排除mysql自带的数据库
        exclude_list = ["sys", "information_schema", "mysql", "performance_schema"]
        if i[0] not in exclude_list:  # 判断不在列表中时
            # 写入第二层数据
            dic[i[0]] = {'name': i[0], 'table_list': []}
            conn.select_db(i[0])  # 切换到指定的库中
            cur.execute('SHOW TABLES')  # 查看库中所有的表
            ret = cur.fetchall()  # 获取执行结果

            for j in ret:
                # 获取每一个表的建表语句
                cur.execute('show create table `%s`;' % j[0])
                ret = cur.fetchall()
                # print(ret)
                for k in ret:
                    # 替换反斜杠,使用\\。替换换行符\n,使用下面的
                    structure = eval(repr(k[1]).replace('\\n  ', ''))
                    # 使用COMMENT= 切割
                    res = structure.split("COMMENT=")

                    if len(res) > 1:
                        explain = res[1]  # 表说明
                        # print(explain)
                        explain_new = explain.strip("'")  # 去掉引号
                        # 写入第三层数据,分别是表名,建表语句,表说明
                        dic[i[0]]['table_list'].append({'tname': k[0], 'structure': structure,'explain':explain_new})

print(dic)



执行输出:

{'db1': {'name': 'db1', 'table_list': [{'tname': 'users', 'structure': "CREATE TABLE `users` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '姓名',PRIMARY KEY (`id`),KEY `ix_users_name` (`name`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表'", 'explain': '用户表'}]}}



写入json文件

import pymysql
import json

conn = pymysql.connect(
    host="127.0.0.1",  # mysql ip地址
    user="root",
    passwd="",
    port=3306  # mysql 端口号,注意:必须是int类型
)

cur = conn.cursor()  # 创建游标

# 获取mysql中所有数据库
cur.execute('SHOW DATABASES')

data_all = cur.fetchall()  # 获取执行的返回结果
# print(data_all)

dic = {}  # 大字典,第一层
for i in data_all:
    if i[0] not in dic:  # 判断库名不在dic中时
        # 排序列表,排除mysql自带的数据库
        exclude_list = ["sys", "information_schema", "mysql", "performance_schema"]
        if i[0] not in exclude_list:  # 判断不在列表中时
            # 写入第二层数据
            dic[i[0]] = {'name': i[0], 'table_list': []}
            conn.select_db(i[0])  # 切换到指定的库中
            cur.execute('SHOW TABLES')  # 查看库中所有的表
            ret = cur.fetchall()  # 获取执行结果

            for j in ret:
                # 获取每一个表的建表语句
                cur.execute('show create table `%s`;' % j[0])
                ret = cur.fetchall()
                # print(ret)
                for k in ret:
                    # 替换反斜杠,使用\\。替换换行符\n,使用下面的
                    structure = eval(repr(k[1]).replace('\\n  ', ''))
                    # 使用COMMENT= 切割
                    res = structure.split("COMMENT=")

                    if len(res) > 1:
                        explain = res[1]  # 表说明
                        # print(explain)
                        explain_new = explain.strip("'")  # 去掉引号
                        # 写入第三层数据,分别是表名,建表语句,表说明
                        dic[i[0]]['table_list'].append({'tname': k[0], 'structure': structure,'explain':explain_new})

# print(dic)
with open('tj.json','w',encoding='utf-8') as f:
    f.write(json.dumps(dic))




执行程序,查看tj.json文件内容

{"db1": {"name": "db1", "table_list": [{"tname": "users", "structure": "CREATE TABLE `users` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '\u59d3\u540d',PRIMARY KEY (`id`),KEY `ix_users_name` (`name`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='\u7528\u6237\u8868'", "explain": "\u7528\u6237\u8868"}]}}



坐标体系

a1单元格的坐标为0,0。在xlrd模块里面,坐标都是数字,所以不能用a1表示。

坐标如下:

1341090-20180719101231682-2089204014.png


先来写入一段示例数据
新建文件excel.py,代码如下:

import xlwt
f = xlwt.Workbook()
sheet1 = f.add_sheet('学生',cell_overwrite_ok=True)
row0 = ["姓名","年龄","出生日期","爱好"]
colum0 = ["张三","李四","王五"]
#写第一行
for i in range(0,len(row0)):
    sheet1.write(0,i,row0[i])

#写第一列
for i in range(0,len(colum0)):
    sheet1.write(i+1,0,colum0[i])

# 写入一行数据
sheet1.write(1,1,"23")
sheet1.write(1,2,"1990")
sheet1.write(1,3,"女")

f.save('test.xls')


执行程序,查看excel文件内容

1341090-20181103205134295-1494516962.png


正式写入excel中

写入库名

熟悉语法之后,就可以写入到excel中了
编辑 excel.py,代码如下:

import xlwt
import json
f = xlwt.Workbook()
sheet1 = f.add_sheet('统计', cell_overwrite_ok=True)
row0 = ["库名", "表名", "表说明", "建表语句"]

# 写第一行
for i in range(0, len(row0)):
    sheet1.write(0, i, row0[i])

# 加载json文件
with open("tj.json", 'r') as load_f:
    load_dict = json.load(load_f)  # 反序列化文件

    num = 0  # 计数器
    for i in load_dict:
        # 写入库名
        sheet1.write(num + 1, 0, i)

    f.save('test1.xls')


执行程序,查看excel文件

1341090-20181103205931308-1551362422.png


写入表名

import xlwt
import json
f = xlwt.Workbook()
sheet1 = f.add_sheet('统计', cell_overwrite_ok=True)
row0 = ["库名", "表名", "表说明", "建表语句"]

# 写第一行
for i in range(0, len(row0)):
    sheet1.write(0, i, row0[i])

# 加载json文件
with open("tj.json", 'r') as load_f:
    load_dict = json.load(load_f)  # 反序列化文件

    num = 0  # 计数器
    for i in load_dict:
        # 写入库名
        sheet1.write(num + 1, 0, i)
        # 遍历所有表
        for j in load_dict[i]["table_list"]:
            # 写入表名
            sheet1.write(num + 1, 1, j['tname'])

    f.save('test1.xls')


执行程序,查看excel文件

1341090-20181103210151316-1271317563.png


写入表说明和建表语句

import xlwt
import json
f = xlwt.Workbook()
sheet1 = f.add_sheet('统计', cell_overwrite_ok=True)
row0 = ["库名", "表名", "表说明", "建表语句"]

# 写第一行
for i in range(0, len(row0)):
    sheet1.write(0, i, row0[i])

# 加载json文件
with open("tj.json", 'r') as load_f:
    load_dict = json.load(load_f)  # 反序列化文件

    num = 0  # 计数器
    for i in load_dict:
        # 写入库名
        sheet1.write(num + 1, 0, i)
        # 遍历所有表
        for j in load_dict[i]["table_list"]:
            # 写入表名
            sheet1.write(num + 1, 1, j['tname'])
            # 写入表说明
            sheet1.write(num + 1, 2, j['explain'])
            # 写入建表语句
            sheet1.write(num + 1, 3, j['structure'])
            num += 1  # 自增1

    f.save('test1.xls')


注意:默认的num必须要自增,否则多个数据库写入会有问题


执行程序,查看excel文件

1341090-20181103210420669-663541873.png


总结
案例只是写入一个数据库,那么多个数据库,也是同样的代码。



有序字典

假设说,excel的内容是这样的

1341090-20181103212350395-613887962.png

对于Python 3.6之前,默认的字典都是无序的。如果需要将普通字典转换为有序字典,需要使用OrderedDict

举例:

from collections import OrderedDict
dic = {"k":1,"a":2,"d":4}
order_dic = OrderedDict()  # 实例化一个有序字典
for i in sorted(dic):  # 必须先对普通字典key做排序
    order_dic[i] = dic[i]  # 写入有序字典中

print(order_dic)


执行输出:

OrderedDict([('a', 2), ('d', 4), ('k', 1)])


注意:将普通字典转换为有序字典时,必须要先对普通字典,做一次排序。那么之后写入到有序字典之后,顺序就是有序了!
不论执行多少次print,结果都是一样的!


改造excel写入

编辑 excel.py,代码如下:

import xlwt
import json
from collections import OrderedDict

f = xlwt.Workbook()
sheet1 = f.add_sheet('统计', cell_overwrite_ok=True)
row0 = ["库名", "表名", "表说明", "建表语句"]

# 写第一行
for i in range(0, len(row0)):
    sheet1.write(0, i, row0[i])

# 加载json文件
with open("tj.json", 'r') as load_f:
    load_dict = json.load(load_f)  # 反序列化文件
    order_dic = OrderedDict()  # 有序字典
    for key in sorted(load_dict):  # 先对普通字典key做排序
        order_dic[key] = load_dict[key]  # 再写入key

    num = 0  # 计数器
    for i in order_dic:
        # 写入库名
        sheet1.write(num + 1, 0, i)
        # 遍历所有表
        for j in order_dic[i]["table_list"]:
            # 写入表名
            sheet1.write(num + 1, 1, j['tname'])
            # 写入表说明
            sheet1.write(num + 1, 2, j['explain'])
            # 写入建表语句
            sheet1.write(num + 1, 3, j['structure'])

            num += 1  # 自增1

    f.save('test1.xls')


执行程序,效果同上(因为数据太少了)

您可能感兴趣的文档:

--结束END--

本文标题: python 统计MySQL表信息

本文链接: https://www.lsjlt.com/news/179186.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python 统计MySQL表信息
    线上有一台MySQL服务器,里面有几十个数据库,每个库有N多表。现在需要将每个表的信息,统计到excel中,格式如下:库名表名表说明建表语句db1users用户表CREATE TABLE `users` (...)怎么做呢?1. 手动录入(...
    99+
    2023-01-30
    信息 python MySQL
  • 如何理解ORACLE表统计信息与列统计信息、索引统计信息
    如何理解ORACLE表统计信息与列统计信息、索引统计信息,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 ...
    99+
    2022-10-19
  • aux_stats$ 基表(系统统计信息)
    aux_stats$ 基表(系统统计信息)...
    99+
    2022-10-18
  • python获取mysql表信息
    使用python获取mysql相关信息,使用python执行mysql相关语句test1 #!/bin/env python #coding=utf-8 #by songry #date 2018-01-09 #time 11:18 #po...
    99+
    2023-01-31
    信息 python mysql
  • python之微信好友统计信息
    需要安装库:wxpy 代码如下: from wxpy import Bot,Tuling,embed,ensure_one bot = Bot(cache_path=True) #获取好友信息 bot.chats() #获取好友的...
    99+
    2023-01-30
    统计信息 好友 python
  • 怎么样的Python脚本进行MySQL对所有表收集统计信息
    运用Python脚本进行MySQL对所有表收集统计信息,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。[root@MySQL01 scrip...
    99+
    2022-10-18
  • 详解mysql持久化统计信息
    一、持久化统计信息的意义:   统计信息用于指导mysql生成执行计划,执行计划的准确与否直接影响到SQL的执行效率;如果mysql一重启   之前的统计信息就没有了,那么当SQL语句来临时,那么mysql就要收集统...
    99+
    2022-05-27
    mysql 持久化统计信息 mysql 统计信息
  • MySQL中怎么收集统计信息
    MySQL中怎么收集统计信息,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 一、手动  ...
    99+
    2022-10-18
  • MySQL统计信息的示例分析
    这篇文章主要为大家展示了“MySQL统计信息的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL统计信息的示例分析”这篇文章吧。MySQL统计信息...
    99+
    2022-10-18
  • oracle统计信息
    create table t2 as select * from dba_objects;  建索引:create index idx_t2 on t2(object_id);2.收集T...
    99+
    2022-10-18
  • Postgresql统计信息
      对于sql优化,除了索引之外,执行计划和统计信息是无法绕开的一个话题,如果sql优化(所有的RDBMS)脱离了统计信息的话就少了一个为什么的过程,味道就感觉少了一大半。刚接触Postgresql,粗浅地学习总结一下Postgr...
    99+
    2022-01-17
    Postgresql统计信息
  • Oracle统计信息(1)
    ...
    99+
    2022-10-18
  • 数据库中怎么找出未收集统计信息以及统计信息过期的表
    小编给大家分享一下数据库中怎么找出未收集统计信息以及统计信息过期的表,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!下面这个查询可以找到从未收集过统计信息或者统计信息过期的表。EXEC&nb...
    99+
    2022-10-18
  • 通过Python收集汇聚MySQL 表信息
    一.需求 统计收集各个实例上table的信息,主要是表的记录数及大小。 收集的范围是cmdb中所有的数据库实例。 二.公共基础文件说明 1.配置文件 配置文为db_servers_conf.ini,假设cmdb的DBServer为119...
    99+
    2017-02-22
    通过Python收集汇聚MySQL 表信息
  • MySQL统计信息的存储有哪几种
    这篇文章主要介绍MySQL统计信息的存储有哪几种,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!MySQL统计信息的存储分为两种,非持久化和持久化统计信息。一、非持久化统计信息非持久化...
    99+
    2022-10-18
  • MySQL统计信息查询慢问题分析
    起因 在MySQL服务器运行mysqld_exporter后,发现数据库的中活跃连接数暴增,而且都是来自于mysqld_exporter的慢查询,语句如下: SELECT T...
    99+
    2022-10-18
  • mongodb批量查询库中表的统计信息
    在mongodb中,查看一个表的统计信息一般用: db.t.stats() 主要信息有: "ns" : "gqtest.t", "count" : 40001, ###行数 "size" : ...
    99+
    2022-10-18
  • Postgresql统计信息概述
      对于sql优化,除了索引之外,执行计划和统计信息是无法绕开的一个话题,如果sql优化(所有的RDBMS)脱离了统计信息的话就少了一个为什么的过程,味道就感觉少了一大半。刚接触Postgresql,粗浅地学习总结一下Postgr...
    99+
    2017-07-30
    Postgresql统计信息概述
  • Oracle 统计信息收集
    Oracle 统计信息收集...
    99+
    2022-10-18
  • ORACLE 收集统计信息
    今天网上看到一篇关于收集统计信息的文章,还不错,特转载下来。...
    99+
    2023-06-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作