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中max函数用法实例分析
Jul 17 Python
浅谈python中列表、字符串、字典的常用操作
Sep 19 Python
Python编程把二叉树打印成多行代码
Jan 04 Python
Python多重继承的方法解析执行顺序实例分析
May 26 Python
python 3.6.4 安装配置方法图文教程
Sep 18 Python
Python图片的横坐标汉字实例
Dec 04 Python
对python中 math模块下 atan 和 atan2的区别详解
Jan 17 Python
解决jupyter notebook显示不全出现框框或者乱码问题
Apr 09 Python
python中wheel的用法整理
Jun 15 Python
python 实现压缩和解压缩的示例
Sep 22 Python
python基础之函数的定义和调用
Oct 24 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
咖啡历史、消费和行业趋势
2021/03/03 咖啡文化
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
2014/01/31 PHP
QQ互联一键登录审核不通过的解决方案
2014/09/10 PHP
php使用Cookie控制访问授权的方法
2015/01/21 PHP
PHP正则表达式匹配替换与分割功能实例浅析
2017/02/04 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
2017/03/14 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
js实现简单模态窗口,背景灰显
2008/11/14 Javascript
JavaScript中使用Object.create()创建对象介绍
2014/12/30 Javascript
JS+CSS实现精美的二级导航效果代码
2015/09/17 Javascript
基于javascript实现全国省市二级联动下拉选择菜单
2016/01/28 Javascript
jquery+ajax+text文本框实现智能提示完整实例
2016/07/09 Javascript
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
Vue实现移动端页面切换效果【推荐】
2018/11/13 Javascript
微信小程序云开发实现云数据库读写权限
2019/05/17 Javascript
vue实现公告栏文字上下滚动效果的示例代码
2020/06/16 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
2020/08/07 Javascript
整理Python中的赋值运算符
2015/05/13 Python
Python编程中对super函数的正确理解和用法解析
2016/07/02 Python
Python实现统计给定列表中指定数字出现次数的方法
2018/04/11 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
2019/04/05 Python
Python对象的属性访问过程详解
2020/03/05 Python
Python使用monkey.patch_all()解决协程阻塞问题
2020/04/15 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
2020/04/24 Python
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
HTML5 客户端数据库简易使用:IndexedDB
2019/12/19 HTML / CSS
MSC邮轮官方网站:加勒比海、地中海和世界各地的假期
2018/08/27 全球购物
行政专员岗位职责范本
2014/08/26 职场文书
反四风个人对照检查材料
2014/09/26 职场文书
2014年大学学生会工作总结
2014/12/02 职场文书
大足石刻导游词
2015/02/02 职场文书
2015年销售工作总结范文
2015/03/30 职场文书
推广普通话主题班会
2015/08/17 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书
使用Ajax实现进度条的绘制
2022/04/07 Javascript