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实现猜数字游戏(无重复数字)示例分享
Mar 29 Python
pycharm 使用心得(五)断点调试
Jun 06 Python
python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
Jul 11 Python
Python中的zip函数使用示例
Jan 29 Python
Python3实现发送QQ邮件功能(附件)
Dec 23 Python
用pandas中的DataFrame时选取行或列的方法
Jul 11 Python
浅谈python3中input输入的使用
Aug 02 Python
Python中__repr__和__str__区别详解
Nov 07 Python
在keras中实现查看其训练loss值
Jun 16 Python
用pushplus+python监控亚马逊到货动态推送微信
Jan 29 Python
编写python程序的90条建议
Apr 14 Python
python scipy 稀疏矩阵的使用说明
May 26 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
PHP迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
php中邮箱地址正则表达式实现与详解
2012/04/24 PHP
PHP创建/删除/复制文件夹、文件
2016/05/03 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
2016/06/13 PHP
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
JS 判断代码全收集
2009/04/28 Javascript
js 复制或插入Html的实现方法小结
2010/05/19 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
2014/08/15 Javascript
Jquery zTree 树控件异步加载操作
2016/02/25 Javascript
基于javascript实现精确到毫秒的倒计时限时抢购
2016/04/17 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
2016/09/30 Javascript
jQuery文字轮播特效
2017/02/12 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
vue.js移动端tab组件的封装实践实例
2017/06/30 Javascript
jquery+css实现下拉列表功能
2017/09/03 jQuery
分析javascript中9 个常见错误阻碍你进步
2017/09/18 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
如何基于js判断浏览器版本
2020/02/20 Javascript
JS图片预加载三种实现方法解析
2020/05/08 Javascript
js实现双人五子棋小游戏
2020/05/28 Javascript
jQuery实现鼠标拖拽登录框移动效果
2020/09/13 jQuery
[01:35]辉夜杯战队访谈宣传片—LGD
2015/12/25 DOTA
利用django如何解析用户上传的excel文件
2017/07/24 Python
解读python logging模块的使用方法
2018/04/17 Python
Django CBV类的用法详解
2019/07/26 Python
在django中,关于session的通用设置方法
2019/08/06 Python
Python字符串中添加、插入特定字符的方法
2019/09/10 Python
python scrapy重复执行实现代码详解
2019/12/28 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
Python模拟登录requests.Session应用详解
2020/11/17 Python
俄罗斯达美乐比萨外送服务:Domino’s Pizza
2020/12/18 全球购物
Net Remoting把服务器端激活两种模式
2014/01/22 面试题
社团活动策划书范文
2014/01/09 职场文书
小学音乐教学反思
2014/02/05 职场文书
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
2021/08/30 Python