因需要,需要将mariadb导出表结构,再navicat中导出的是数据sql类型的结构,不能够转换为可视化的excl或者csv。本代码是别人写的,不能跑通,稍做修改导出全数据库的。
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2022/2/18 9:47# @Author : cwb# @Site : # @File : exportMariadb.py# @Software: PyCharm# !/usr/bin/python3import pymysqlimport xlwt# 要连接的数据库信息db_ip = 'ip请替换'db_port = 3306 #请替换db_user_name = 'root请替换'db_password = 'passwd请替换'db_name = 'information_schema'# 要查询的数据库名和表名search_db_name = 'dbname请替换'search_table_names = []# 导出数据库的所有表名称db1 = pymysql.connect(host=db_ip, port=db_port, user=db_user_name, passwd=db_password, db=search_db_name)cursor1 = db1.cursor()cursor1.execute("show tables")results = cursor1.fetchall()for item in results: search_table_names.append("".join(item))# 导出数据库的表结构db = pymysql.connect(host=db_ip, port=db_port, user=db_user_name, passwd=db_password, db=db_name)# 新建一个excelbook = xlwt.Workbook()# 添加一个sheet页sheet = book.add_sheet('table_schema')line = 0 # 控制行# 设置某列的单元格宽度sheet.col(0).width = 8000sheet.col(1).width = 4500sheet.col(2).width = 3000sheet.col(3).width = 2200sheet.col(4).width = 2500sheet.col(5).width = 2000sheet.col(6).width = 10000for search_table_name in search_table_names: # 拼接sql sql = "SELECt column_name,column_comment,data_type,character_maximum_length,is_nullable,column_default,column_type FROM columns where table_schema =" + "'" + search_db_name + "'" + "AND table_name=" + "'" + search_table_name + "'" # 输出数据表名 title_style = xlwt.XFStyle() # 初始化样式 title_font = xlwt.Font() # 创建字体 title_font.name = u'微软雅黑' # 字体类型 title_font.height = 280 # 字体大小 200等于excel字体大小中的10 title_style.font = title_font # 设定样式 sheet.write_merge(line, line, 0, 6, search_table_name, title_style) line += 1 # 字段名的中文描述 des_style = xlwt.XFStyle() # 初始化样式 des_font = xlwt.Font() # 创建字体 des_font.name = u'宋体' # 字体类型 des_font.height = 240 # 字体大小 200等于excel字体大小中的10 des_style.font = des_font # 设定样式 description = ['列名', '备注', '字段类型', '长度', '是否为空', '默认值', '数据类型'] des_col = 0 for des in description: sheet.write(line, des_col, des, des_style) des_col += 1 line += 1 try: cursor = db.cursor() cursor.execute(sql) results = cursor.fetchall() # 输出字段的信息 content_style = xlwt.XFStyle() # 初始化样式 content_font = xlwt.Font() # 创建字体 content_font.name = u'微软雅黑' # 字体类型 content_font.height = 240 # 字体大小 200等于excel字体大小中的10 content_style.font = content_font # 设定样式 for row in results: col = 0 # 控制列 for s in row: # 再循环里面list的值,每一列 sheet.write(line, col, s, content_style) col += 1 line += 1 for i in [0, 1, 2, 3, 4, 5, 6]: sheet.write(line, i, '') line += 1 for i in [0, 1, 2, 3, 4, 5, 6]: sheet.write(line, i, '') line += 1 except Exception as e: print(e) print("Error: unable to fetch data")book.save('tables.xls') # 保存到当前目录下db.close()