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模块连接操作mysql数据库实例
Apr 08 Python
python实现在windows下操作word的方法
Apr 28 Python
在Django的通用视图中处理Context的方法
Jul 21 Python
Python反射用法实例简析
Dec 22 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
Jun 26 Python
Python通用循环的构造方法实例分析
Dec 19 Python
Python + Requests + Unittest接口自动化测试实例分析
Dec 12 Python
Python 实现Image和Ndarray互相转换
Feb 19 Python
python3实现往mysql中插入datetime类型的数据
Mar 02 Python
tensorflow实现将ckpt转pb文件的方法
Apr 22 Python
基于Python的接口自动化读写excel文件的方法
Jan 15 Python
Django rest framework如何自定义用户表
Jun 09 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
《OVERLORD》第四季,终于等到你!
2020/03/02 日漫
javascript编程起步(第七课)
2007/02/27 Javascript
疯掉了,尽然有js写的操作系统
2007/04/23 Javascript
Add a Picture to a Microsoft Word Document
2007/06/15 Javascript
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
2008/03/22 Javascript
Extjs学习笔记之八 继承和事件基础
2010/01/08 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
2014/04/15 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
firefox浏览器用jquery.uploadify插件上传时报HTTP 302错误
2015/03/01 Javascript
Javascript实现字数统计
2015/07/03 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
原生JS实现网络彩票投注效果
2016/09/25 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
9个让JavaScript调试更简单的Console命令
2016/11/14 Javascript
jquery dataTable 后台加载数据并分页实例代码
2017/06/07 jQuery
vue仿淘宝订单状态的tab切换效果
2020/06/23 Javascript
Vue实现用户自定义字段显示数据的方法
2018/08/28 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
2019/06/24 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
Python学习笔记之os模块使用总结
2014/11/03 Python
Windows下python3.6.4安装教程
2018/07/31 Python
Python搭建代理IP池实现存储IP的方法
2019/10/27 Python
详解pycharm连接不上mysql数据库的解决办法
2020/01/10 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
VSCODE配置Markdown及Markdown基础语法详解
2021/01/19 Python
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
NBA欧洲商店(法国):NBA Europe Store FR
2016/10/19 全球购物
EJB的激活机制
2013/10/25 面试题
应届生保险求职信
2013/11/11 职场文书
毕业自我评价
2014/02/05 职场文书
2014年幼儿园教师工作总结
2014/11/08 职场文书
观看建国大业观后感
2015/06/01 职场文书
读《庄子》有感:美而不自知
2019/11/06 职场文书
python中sqllite插入numpy数组到数据库的实现方法
2021/06/21 Python
Python实现提取PDF简历信息并存入Excel
2022/04/02 Python