python导出mariadb表结构
因需要,需要将mariadb导出表结构,再navicat中导出的是数据sql类型的结构,不能够转换为可视化的excl或者csv。本代码是别人写的,不能跑通,稍做修改导出全数据库的。#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time: 2022/2/18 9:47# @Author: cwb# @Site:# @File: exportMariad
·
因需要,需要将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/python3
import pymysql
import 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)
# 新建一个excel
book = xlwt.Workbook()
# 添加一个sheet页
sheet = book.add_sheet('table_schema')
line = 0 # 控制行
# 设置某列的单元格宽度
sheet.col(0).width = 8000
sheet.col(1).width = 4500
sheet.col(2).width = 3000
sheet.col(3).width = 2200
sheet.col(4).width = 2500
sheet.col(5).width = 2000
sheet.col(6).width = 10000
for 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()
更多推荐
已为社区贡献1条内容
所有评论(0)