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 UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
Apr 24 Python
python基于phantomjs实现导入图片
May 13 Python
Python爬取当当、京东、亚马逊图书信息代码实例
Dec 09 Python
python验证码识别教程之利用投影法、连通域法分割图片
Jun 04 Python
PyQt4实时显示文本内容GUI的示例
Jun 14 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
Aug 05 Python
Pytorch 保存模型生成图片方式
Jan 10 Python
Python 使用 environs 库定义环境变量的方法
Feb 25 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
Jun 03 Python
Python图像阈值化处理及算法比对实例解析
Jun 19 Python
Pycharm的Available Packages为空的解决方法
Sep 18 Python
Python读写yaml文件
Mar 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 header 跳转
2013/06/17 PHP
php绘制一个矩形的方法
2015/01/24 PHP
php微信公众号js-sdk开发应用
2016/11/28 PHP
php框架CodeIgniter主从数据库配置方法分析
2018/05/25 PHP
PHP实现可精确验证身份证号码的工具类示例
2018/05/31 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
解决Laravel5.2 Auth认证退出失效的问题
2019/10/14 PHP
你需要知道的JavsScript可以做什么?
2007/06/29 Javascript
JS去除字符串的空格增强版(可以去除中间的空格)
2009/08/26 Javascript
JavaScript 拾漏补遗
2009/12/27 Javascript
js获取鼠标点击的位置实现思路及代码
2014/05/09 Javascript
JS+CSS实现简易实用的滑动门菜单效果
2015/09/18 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
解析AngularJS中get请求URL出现的跨域问题
2016/12/01 Javascript
jQuery表单设置值的方法
2017/06/30 jQuery
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
2017/11/27 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
vue-cli创建的项目,配置多页面的实现方法
2018/03/15 Javascript
详解Javascript中new()到底做了些什么?
2018/03/29 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
微信小程序基于movable-view实现滑动删除效果
2020/01/08 Javascript
详解Nuxt内导航栏的两种实现方式
2020/04/16 Javascript
基于JS实现快速读取TXT文件
2020/08/25 Javascript
[01:11:21]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第三场 3月7日
2021/03/11 DOTA
python实现批量修改文件名代码
2017/09/10 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
浅谈Html5中视频 音频标签 进度条的问题
2016/07/26 HTML / CSS
大家检讨书5000字
2014/02/03 职场文书
年终总结会议主持词
2014/03/17 职场文书
会计学习心得体会
2014/09/09 职场文书
党的群众路线教育实践活动专题组织生活会发言材料
2014/10/17 职场文书
2014年文员工作总结
2014/11/18 职场文书
超市采购员岗位职责
2015/04/07 职场文书
2016教师节问候语
2015/11/10 职场文书
python+pytest接口自动化之token关联登录的实现
2022/04/06 Python