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 26 Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
Aug 07 Python
详解python中xlrd包的安装与处理Excel表格
Dec 16 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
Jan 20 Python
Django查询数据库的性能优化示例代码
Sep 24 Python
浅谈Python里面小数点精度的控制
Jul 16 Python
Python OpenCV利用笔记本摄像头实现人脸检测
Aug 20 Python
pyinstaller打包opencv和numpy程序运行错误解决
Aug 16 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
Feb 06 Python
Python 把两层列表展开平铺成一层(5种实现方式)
Apr 07 Python
python 自动化偷懒的四个实用操作
Apr 11 Python
python迷宫问题深度优先遍历实例
Jun 20 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 isset empty函数相关面试题及解析
2020/12/11 PHP
JScript内置对象Array中元素的删除方法
2007/03/08 Javascript
jQuery Study Notes学习笔记 (二)
2010/08/04 Javascript
jquery validation验证身份证号,护照,电话号码,email(实例代码)
2013/11/06 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
jQuery实现鼠标划过修改样式的方法
2015/04/14 Javascript
完美实现仿QQ空间评论回复特效
2015/05/06 Javascript
JS访问SWF的函数用法实例
2015/07/01 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
jQuery form插件之ajaxForm()和ajaxSubmit()的可选参数项对象
2016/01/23 Javascript
jQuery中fadein与fadeout方法用法示例
2016/09/16 Javascript
Node.js下自定义错误类型详解
2016/10/17 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
Node.js中DNS模块学习总结
2018/02/28 Javascript
讲解vue-router之命名路由和命名视图
2018/05/28 Javascript
js实现继承的方法及优缺点总结
2019/05/08 Javascript
深入理解JS异步编程-Promise
2019/06/03 Javascript
Vue 2.0双向绑定原理的实现方法
2019/10/23 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
python私有属性和方法实例分析
2015/01/15 Python
对python中的for循环和range内置函数详解
2018/04/17 Python
Python 抓取微信公众号账号信息的方法
2019/06/14 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
2019/08/30 Python
python 表格打印代码实例解析
2019/10/12 Python
线程安全及Python中的GIL原理分析
2019/10/29 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
2020/03/08 Python
Python3标准库glob文件名模式匹配的问题
2020/03/13 Python
CSS3教程(6):创建网站多列
2009/04/02 HTML / CSS
详解px单位html5响应式方案
2018/03/08 HTML / CSS
网络安全类面试题
2015/08/01 面试题
二手房购房意向书范本
2014/04/01 职场文书
综合实践活动报告
2015/02/05 职场文书
会计岗位职责范本
2015/04/02 职场文书
生日祝酒词大全
2015/08/10 职场文书
2016年优秀少先队辅导员事迹材料
2016/02/26 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers