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使用MYSQLDB实现从数据库中导出XML文件的方法
May 11 Python
举例讲解Python中的Null模式与桥接模式编程
Feb 02 Python
利用python打印出菱形、三角形以及矩形的方法实例
Aug 08 Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
Oct 11 Python
selenium+python截图不成功的解决方法
Jan 30 Python
使用Python轻松完成垃圾分类(基于图像识别)
Jul 09 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
Aug 04 Python
Python如何使用BeautifulSoup爬取网页信息
Nov 26 Python
使用pandas 将DataFrame转化成dict
Dec 10 Python
Python实现实时数据采集新型冠状病毒数据实例
Feb 04 Python
超全Python图像处理讲解(多模块实现)
Apr 13 Python
python温度转换华氏温度实现代码
Dec 06 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 smarty模版引擎中变量操作符及使用方法
2009/12/11 PHP
php随机生成数字字母组合的方法
2015/03/18 PHP
php求数组全排列,元素所有组合的方法
2016/05/05 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
2016/09/11 PHP
php封装的mysqli类完整实例
2016/10/18 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
选择器中含有空格在使用示例及注意事项
2013/07/31 Javascript
div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
2013/08/29 Javascript
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
2016/01/06 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
2016/07/19 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
Bootstrap3多级下拉菜单
2017/02/24 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
浅谈react性能优化的方法
2018/09/05 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
vue3+typeScript穿梭框的实现示例
2020/12/29 Vue.js
[01:05:30]VP vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python中使用不同编码读写txt文件详解
2015/05/28 Python
python将秒数转化为时间格式的实例
2018/09/16 Python
浅谈python的深浅拷贝以及fromkeys的用法
2019/03/08 Python
python开头的coding设置方法
2019/08/08 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
2020/04/08 Python
Python爬取微信小程序通用方法代码实例详解
2020/09/29 Python
Django如何实现防止XSS攻击
2020/10/13 Python
.net面试题
2015/12/22 面试题
应届生服务员求职信
2013/10/31 职场文书
家长给幼儿园的表扬信
2014/01/09 职场文书
公司培训欢迎词
2014/01/10 职场文书
婚庆司仪主持词
2014/03/15 职场文书
本科应届生求职信
2014/08/05 职场文书
争做文明公民倡议书
2014/08/29 职场文书
授权委托书样本
2014/09/25 职场文书
解决persistence.xml配置文件修改存放路径的问题
2022/02/24 Java/Android