Python使用win32com模块实现数据库表结构自动生成word表格的方法


Posted in Python onJuly 17, 2018

本文实例讲述了Python使用win32com模块实现数据库表结构自动生成word表格的方法。分享给大家供大家参考,具体如下:

下载win32模块

下载链接:https://sourceforge.net/projects/pywin32/files/pywin32/

连接mysql

import MySQLdb
db_host = ""
db_port = 3306
db_name = ""
db_user = ""
db_pwd = ""
db = MySQLdb.connect(host=db_host,port=db_port,user=db_user,passwd=db_pwd,db=db_name,charset="utf8")
cursor = db.cursor()

获取所有表结构

#获取表数据库中所有表和备注
def get_tables(cursor,db_name):
  sql = "select table_name,table_comment from information_schema.tables where table_schema = '" + db_name + "'"
  cursor.execute(sql)
  result = cursor.fetchall()
  tables = {}
  for r in result:
    tables[r[0]] = r[1]
  return tables
#获取表结构
def get_table_desc(cursor,db_name,table_name):
  sql = "select column_name,column_type,column_default,is_nullable,column_comment from information_schema.columns where table_schema = '" + db_name + "' and table_name = '" + table_name + "'" 
  cursor.execute(sql)
  result = cursor.fetchall()
  return result

win32com操作

from win32com.client import Dispatch,constants
word = Dispatch('Word.Application')
word.Visible = 1 #是否在后台运行word
word.DisplayAlerts = 0 #是否显示警告信息
doc = word.Documents.Add() #新增一个文档
r = doc.Range(0,0) #获取一个范围
r.Style.Font.Name = u"Verdana" #设置字体
r.Style.Font.Size = "9" #设置字体大小
r.InsertBefore("\n" + 表描述 + " " + 表名) #在这个范围前插入文本
table = r.Tables.Add(doc.Range(r.End,r.End),字段数+1,5) #建一张表格
table.Rows[0].Cells[0].Range.Text = u"列"
table.Rows[0].Cells[1].Range.Text = u"类型"
table.Rows[0].Cells[2].Range.Text = u"默认值"
table.Rows[0].Cells[3].Range.Text = u"是否为空"
table.Rows[0].Cells[4].Range.Text = u"列备注"

完整代码

#coding:utf-8
#把数据库中的表结构导出到word的表格中,完成设计文档
#不会用win32com操作word样式
import MySQLdb,config
from win32com.client import Dispatch,constants
db_name = "crawlerdb_update"
db = MySQLdb.connect(host=config.db_host,port=config.db_port,user=config.db_user,passwd=config.db_pwd,db=db_name,charset="utf8")
cursor = db.cursor()
def get_tables(cursor,db_name):
  sql = "select table_name,table_comment from information_schema.tables where table_schema = '" + db_name + "'"
  cursor.execute(sql)
  result = cursor.fetchall()
  tables = {}
  for r in result:
    tables[r[0]] = r[1]
  return tables
def get_table_desc(cursor,db_name,table_name):
  sql = "select column_name,column_type,column_default,is_nullable,column_comment from information_schema.columns where table_schema = '" + db_name + "' and table_name = '" + table_name + "'" 
  cursor.execute(sql)
  result = cursor.fetchall()
  return result
tables = get_tables(cursor,db_name)
word = Dispatch('Word.Application')
word.Visible = 1 
word.DisplayAlerts = 0 
doc = word.Documents.Add()
r = doc.Range(0,0)
r.Style.Font.Name = u"Verdana"
r.Style.Font.Size = "9"
for k,table_name in enumerate(tables):
  tables_desc = get_table_desc(cursor,db_name,table_name)
  print r.Start
  r.InsertBefore("\n" + tables[table_name] + " " + table_name)
  table = r.Tables.Add(doc.Range(r.End,r.End),len(tables_desc) + 1,5)
  table.Rows[0].Cells[0].Range.Text = u"列"
  table.Rows[0].Cells[1].Range.Text = u"类型"
  table.Rows[0].Cells[2].Range.Text = u"默认值"
  table.Rows[0].Cells[3].Range.Text = u"是否为空"
  table.Rows[0].Cells[4].Range.Text = u"列备注"
  for i,column in enumerate(tables_desc):
    for j,col in enumerate(column):
      if col == None:
        col = "(NULL)"
      table.Rows[i+1].Cells[j].Range.Text = col
  r = doc.Range(table.Range.End,table.Range.End)
  break

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
浅谈Python浅拷贝、深拷贝及引用机制
Dec 15 Python
Python聊天室程序(基础版)
Apr 01 Python
django manage.py扩展自定义命令方法
May 27 Python
python实现连续图文识别
Dec 18 Python
numpy下的flatten()函数用法详解
May 27 Python
在VS2017中用C#调用python脚本的实现
Jul 31 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
Aug 13 Python
详解Python3定时器任务代码
Sep 23 Python
python实现回旋矩阵方式(旋转矩阵)
Dec 04 Python
python实现简单的井字棋游戏(gui界面)
Jan 22 Python
Python图像处理库PIL详细使用说明
Apr 06 Python
Django框架模板用法详解
Jun 10 Python
python 数字类型和字符串类型的相互转换实例
Jul 17 #Python
python 移除字符串尾部的数字方法
Jul 17 #Python
基于python代码实现简易滤除数字的方法
Jul 17 #Python
Sanic框架Cookies操作示例
Jul 17 #Python
Sanic框架配置操作分析
Jul 17 #Python
Sanic框架蓝图用法实例分析
Jul 17 #Python
PyCharm设置SSH远程调试的方法
Jul 17 #Python
You might like
《OVERLORD》手游英文版即将上线 手机上也能扮演骨王
2020/04/09 日漫
PHP strtotime函数详解
2009/12/18 PHP
javascript 在网页中的运用(asp.net)
2009/11/23 Javascript
关于javascript中this关键字(翻译+自我理解)
2010/10/20 Javascript
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
JS简单的图片放大缩小的两种方法
2013/11/11 Javascript
jquery根据属性和index来查找属性值并操作
2014/07/25 Javascript
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
微信小程序 五星评价功能的实现
2017/03/09 Javascript
angular实现spa单页面应用实例
2017/07/10 Javascript
jQuery读取本地的json文件(实例讲解)
2017/10/31 jQuery
js判断节假日实例代码
2017/12/27 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
layui 设置table 行的高度方法
2018/08/17 Javascript
[51:29]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第一场 11.05
2020/11/05 DOTA
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
2018/01/24 Python
pytorch GAN生成对抗网络实例
2020/01/10 Python
python使用pandas抽样训练数据中某个类别实例
2020/02/28 Python
python实现坦克大战
2020/04/24 Python
pycharm 添加解释器的方法步骤
2020/08/31 Python
使用HTML5做个画图板的方法介绍
2013/05/03 HTML / CSS
Eton丹麦官网:精美的男式衬衫
2020/05/27 全球购物
乐高瑞士官方商店:LEGO CH
2020/08/16 全球购物
加拿大服装和鞋类零售商:Mark’s
2021/01/04 全球购物
人力资源专员自我评价怎么写
2013/09/19 职场文书
药学专业个人自我评价
2013/11/11 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
社区党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
2015年医药代表工作总结
2015/04/25 职场文书
公司出差管理制度范本
2015/08/05 职场文书
高中团支书竞选稿
2015/11/21 职场文书
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
2021/04/01 PHP
pandas取dataframe特定行列的实现方法
2021/05/24 Python
Python OpenCV实现图形检测示例详解
2022/04/08 Python
Springboot集成kafka高级应用实战分享
2022/08/14 Java/Android