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多线程http下载实现示例
Dec 30 Python
pyqt4教程之widget使用示例分享
Mar 07 Python
Python编写百度贴吧的简单爬虫
Apr 02 Python
九步学会Python装饰器
May 09 Python
各个系统下的Python解释器相关安装方法
Oct 12 Python
Python编程对列表中字典元素进行排序的方法详解
May 26 Python
python实现C4.5决策树算法
Aug 29 Python
Python3 log10()函数简单用法
Feb 19 Python
基于python的列表list和集合set操作
Nov 24 Python
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
Aug 07 Python
Jupyter安装链接aconda实现过程图解
Nov 02 Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
Jan 18 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
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
Extjs学习笔记之二 初识Extjs之Form
2010/01/07 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件打包下载
2010/09/15 Javascript
jQuery页面滚动浮动层智能定位实例代码
2011/08/23 Javascript
通过js为元素添加多项样式,浏览器全兼容写法
2014/08/30 Javascript
javascript感应鼠标图片透明度显示的方法
2015/02/24 Javascript
jQuery验证元素是否为空的两种常用方法
2015/03/17 Javascript
jQuery实现form表单元素序列化为json对象的方法
2015/12/09 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
2017/02/14 Javascript
理解javascript async的用法
2017/08/22 Javascript
React-Router如何进行页面权限管理的方法
2017/12/06 Javascript
vue利用v-for嵌套输出多层对象,分别输出到个表的方法
2018/09/07 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
vue的webcamjs集成方式
2020/11/16 Javascript
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
[01:03]DOTA2新的征程 你的脚印值得踏上
2014/08/13 DOTA
[01:01:51]EG vs VG Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
使用Python编写类UNIX系统的命令行工具的教程
2015/04/15 Python
python实现同时给多个变量赋值的方法
2015/04/30 Python
Python基础入门之seed()方法的使用
2015/05/15 Python
Python3 处理JSON的实例详解
2017/10/29 Python
Python爬虫获取整个站点中的所有外部链接代码示例
2017/12/26 Python
Python中类似于jquery的pyquery库用法分析
2019/12/02 Python
Pycharm 跳转回之前所在页面的操作
2021/02/05 Python
详解WebSocket跨域问题解决
2018/08/06 HTML / CSS
.NET面试10题
2014/02/24 面试题
资产经营总监岗位职责
2013/12/04 职场文书
酒店实习个人鉴定
2013/12/07 职场文书
季度思想汇报
2014/01/01 职场文书
长城导游词
2015/01/30 职场文书
总结python多进程multiprocessing的相关知识
2021/06/29 Python
【DOTA2】高能暴走TK秀!PSG LGD vs ASTER - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA
收音机爱好者玩机13年,简评其使用过的19台收音机
2022/04/30 无线电
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL
tree shaking对打包体积优化及作用
2022/07/07 Java/Android