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查看多台服务器进程的脚本分享
Jun 11 Python
Python实现动态添加类的属性或成员函数的解决方法
Jul 16 Python
Python升级提示Tkinter模块找不到的解决方法
Aug 22 Python
Python中用Decorator来简化元编程的教程
Apr 13 Python
python中zip和unzip数据的方法
May 27 Python
Python之两种模式的生产者消费者模型详解
Oct 26 Python
Linux下安装python3.6和第三方库的教程详解
Nov 09 Python
Pycharm创建项目时如何自动添加头部信息
Nov 14 Python
使用Python爬虫库requests发送表单数据和JSON数据
Jan 25 Python
python实现凯撒密码、凯撒加解密算法
Jun 11 Python
sklearn和keras的数据切分与交叉验证的实例详解
Jun 19 Python
Python 如何实现访问者模式
Jul 28 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 Cookie的一个使用注意点
2008/11/08 PHP
php输出指定时间以前时间格式的方法
2015/03/21 PHP
10款实用的PHP开源工具
2015/10/23 PHP
Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解
2016/07/20 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
tp5框架内使用tp3.2分页的方法分析
2019/05/05 PHP
浅析PHP中json_encode与json_decode的区别
2020/07/15 PHP
javascript 写类方式之四
2009/07/05 Javascript
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
2009/07/06 Javascript
jquery之超简单的div显示和隐藏特效demo(分享)
2013/07/09 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
jQuery获得内容和属性示例代码
2014/01/16 Javascript
一个网页标题title的闪动提示效果实现思路
2014/03/22 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
用js实现放大镜的效果的简单实例
2016/05/23 Javascript
防止Node.js中错误导致进程阻塞的办法
2016/08/11 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
利用Jasmine对Angular进行单元测试的方法详解
2017/06/12 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
Vue实现内部组件轮播切换效果的示例代码
2018/04/07 Javascript
vue下拉列表功能实例代码
2018/04/08 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
2020/03/16 Javascript
vant 中van-list的用法说明
2020/11/11 Javascript
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
Python yield使用方法示例
2013/12/04 Python
浅谈python抛出异常、自定义异常, 传递异常
2016/06/20 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
Python自定义函数计算给定日期是该年第几天的方法示例
2019/05/30 Python
python 用 xlwings 库 生成图表的操作方法
2019/12/22 Python
django实现HttpResponse返回json数据为中文
2020/03/27 Python
医学专业五年以上个人求职信
2013/12/03 职场文书
就业协议书范本
2014/04/11 职场文书
2015年幼儿园个人工作总结
2015/04/25 职场文书
Python日志模块logging用法
2022/06/05 Python