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列表推导式与生成器表达式用法示例
Feb 08 Python
python正则表达式爬取猫眼电影top100
Feb 24 Python
python 寻找list中最大元素对应的索引方法
Jun 28 Python
python实现画五角星和螺旋线的示例
Jan 20 Python
解决python执行不输出系统命令弹框的问题
Jun 24 Python
opencv调整图像亮度对比度的示例代码
Sep 27 Python
pytorch 实现查看网络中的参数
Jan 06 Python
tensorflow mnist 数据加载实现并画图效果
Feb 05 Python
最小二乘法及其python实现详解
Feb 24 Python
Python字符串函数strip()原理及用法详解
Jul 23 Python
PyCharm2019 安装和配置教程详解附激活码
Jul 31 Python
实例详解Python的进程,线程和协程
Mar 13 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
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
2010/05/16 PHP
Yii使用migrate命令执行sql语句的方法
2016/03/15 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
PHP使用new StdClass()创建空对象的方法分析
2017/06/06 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
2020/05/15 PHP
json 定义
2008/06/10 Javascript
ExtJs中简单的登录界面制作方法
2010/08/19 Javascript
jQuery EasyUI API 中文文档 - ComboGrid 组合表格
2011/10/13 Javascript
JavaScript定时器详解及实例
2013/08/01 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
jquery自定义下拉列表示例
2014/04/25 Javascript
jquery幻灯片插件bxslider样式改进实例
2014/10/15 Javascript
jQuery实现宽屏图片轮播实例教程
2015/11/24 Javascript
详解javascript高级定时器
2015/12/31 Javascript
JavaScript+html5 canvas实现本地截图教程
2020/04/16 Javascript
学习使用Bootstrap栅格系统
2017/05/11 Javascript
详解bootstrap用dropdown-menu实现上下文菜单
2017/09/22 Javascript
Angular开发实践之服务端渲染
2018/03/29 Javascript
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
使用Python的PIL模块来进行图片对比
2016/02/18 Python
Python面向对象特殊成员
2017/04/24 Python
Python使用re模块正则提取字符串中括号内的内容示例
2018/06/01 Python
Python实现生成密码字典的方法示例
2019/09/02 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
2020/06/02 Python
pytorch快速搭建神经网络_Sequential操作
2020/06/17 Python
利用python 读写csv文件
2020/09/10 Python
python利用后缀表达式实现计算器功能
2021/02/22 Python
使用CSS禁止textarea调整大小功能的方法
2015/03/13 HTML / CSS
Surfdome西班牙:世界上最受欢迎的生活方式品牌
2019/02/13 全球购物
大学本科毕业生求职信范文
2013/12/18 职场文书
创业计划书的写作技巧及要点
2014/01/31 职场文书
经销商年会策划方案
2014/05/29 职场文书
捐书倡议书
2014/08/29 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书