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之集合的关系
Sep 24 Python
Python3字符串学习教程
Aug 20 Python
tensorflow入门之训练简单的神经网络方法
Feb 26 Python
Python利用splinter实现浏览器自动化操作方法
May 11 Python
对Python2与Python3中__bool__方法的差异详解
Nov 01 Python
解决python中导入win32com.client出错的问题
Jul 26 Python
使用python实现kNN分类算法
Oct 16 Python
PyCharm使用Docker镜像搭建Python开发环境
Dec 26 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
Sep 11 Python
MoviePy简介及Python视频剪辑自动化
Dec 18 Python
python定义具名元组实例操作
Feb 28 Python
Python软件包安装的三种常见方法
Jul 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
解析thinkphp的左右值无限分类
2013/06/20 PHP
php中Socket创建与监听实现方法
2015/01/05 PHP
php微信公众号开发之音乐信息
2018/10/20 PHP
PHP下载大文件失败并限制下载速度的实例代码
2019/05/10 PHP
在IE模态窗口中自由查看HTML源码的方法
2007/03/08 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
2014/01/09 Javascript
JS实现仿中关村论坛评分后弹出提示效果的方法
2015/02/23 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)
2015/11/29 Javascript
jquery mobile界面数据刷新的实现方法
2016/05/28 Javascript
js友好的时间返回函数
2016/08/24 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
2016/11/09 Javascript
jquery.multiselect多选下拉框实现代码
2016/11/11 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
javascript 中的try catch应用总结
2017/04/01 Javascript
js遍历获取表格内数据的方法(必看)
2017/04/06 Javascript
Vuex利用state保存新闻数据实例
2017/06/28 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
2018/03/01 Javascript
JavaScript变速动画函数封装添加任意多个属性
2019/04/03 Javascript
TypeScript中的方法重载详解
2019/04/12 Javascript
elementUI同一页面展示多个Dialog的实现
2020/11/19 Javascript
[03:12]完美世界DOTA2联赛PWL DAY6集锦
2020/11/05 DOTA
python类和继承用法实例
2015/07/07 Python
Python中django学习心得
2017/12/06 Python
利用Python正则表达式过滤敏感词的方法
2019/01/21 Python
python 在指定范围内随机生成不重复的n个数实例
2019/01/28 Python
python序列化与数据持久化实例详解
2019/12/20 Python
python中urllib.request和requests的使用及区别详解
2020/05/05 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
html5.2 dialog简介详解
2018/02/27 HTML / CSS
html5实现输入框fixed定位在屏幕最底部兼容性
2020/07/03 HTML / CSS
学历公证委托书
2014/04/09 职场文书
教师评语大全
2014/04/28 职场文书
讲座通知范文
2015/04/23 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
行政处罚决定书
2015/06/24 职场文书