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 相关文章推荐
Django集成百度富文本编辑器uEditor攻略
Jul 04 Python
python中的错误处理
Apr 10 Python
利用python获取某年中每个月的第一天和最后一天
Dec 15 Python
Django 前后台的数据传递的方法
Aug 08 Python
python中reload(module)的用法示例详解
Sep 15 Python
Windows系统下PhantomJS的安装和基本用法
Oct 21 Python
python: 判断tuple、list、dict是否为空的方法
Oct 22 Python
python 实现方阵的对角线遍历示例
Nov 29 Python
Python request操作步骤及代码实例
Apr 13 Python
keras-siamese用自己的数据集实现详解
Jun 10 Python
Python基础知识学习之类的继承
May 31 Python
pytorch分类模型绘制混淆矩阵以及可视化详解
Apr 07 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/07/17 PHP
Session服务器配置指南与使用经验的深入解析
2013/06/17 PHP
使用PHP接收POST数据,解析json数据
2013/06/28 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
2016/12/27 PHP
基于jQuery的仿flash的广告轮播代码
2010/11/04 Javascript
js点击页面其它地方将某个显示的DIV隐藏
2012/07/12 Javascript
jQuery网页右侧广告跟随滚动代码分享
2020/04/20 Javascript
ES6的新特性概览
2016/03/10 Javascript
javascript 继承学习心得总结
2016/03/17 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
2016/05/05 Javascript
基于BootStrap Metronic开发框架经验小结【二】列表分页处理和插件JSTree的使用
2016/05/12 Javascript
js数组的五种迭代方法及两种归并方法(推荐)
2016/06/14 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
JS实现快速的导航下拉菜单动画效果附源码下载
2016/11/01 Javascript
Bootstrap输入框组件使用详解
2017/06/09 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
2018/10/25 Javascript
Vue 3.0 前瞻Vue Function API新特性体验
2019/08/12 Javascript
微信小程序canvas绘制圆角base64图片的实现
2019/08/18 Javascript
扫微信小程序码实现网站登陆实现解析
2019/08/20 Javascript
[20:39]DOTA2-DPC中国联赛 正赛开幕式 1月18日
2021/03/11 DOTA
详解Python中列表和元祖的使用方法
2015/04/25 Python
python互斥锁、加锁、同步机制、异步通信知识总结
2018/02/11 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
浅谈django 模型类使用save()方法的好处与注意事项
2020/03/28 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
2020/04/22 Python
如何用Python绘制3D柱形图
2020/09/16 Python
利用CSS3把图片变成灰色模式的实例代码
2016/09/06 HTML / CSS
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
《北京的春节》教学反思
2014/04/07 职场文书
《孔繁森》教学反思
2014/04/17 职场文书
乡镇领导班子四风对照检查材料
2014/09/27 职场文书
群众路线教育实践活动实施方案
2014/10/31 职场文书
详解CSS不定宽溢出文本适配滚动
2021/05/24 HTML / CSS
Mysql 用户权限管理实现
2021/05/25 MySQL
Python还能这么玩之只用30行代码从excel提取个人值班表
2021/06/05 Python
Feign调用全局异常处理解决方案
2021/06/24 Java/Android