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 相关文章推荐
Django实现组合搜索的方法示例
Jan 23 Python
Python实现的HMacMD5加密算法示例
Apr 03 Python
python实现随机漫步算法
Aug 27 Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
Sep 04 Python
PyTorch中常用的激活函数的方法示例
Aug 20 Python
python selenium循环登陆网站的实现
Nov 04 Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
Nov 25 Python
Keras设置以及获取权重的实现
Jun 19 Python
Python3爬虫中pyspider的安装步骤
Jul 29 Python
Python爬虫破解登陆哔哩哔哩的方法
Nov 17 Python
python 获取域名到期时间的方法步骤
Feb 10 Python
python编写函数注意事项总结
Mar 29 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中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
PHP简单选择排序算法实例
2015/01/26 PHP
必须收藏的php实用代码片段
2016/02/02 PHP
thinkphp隐藏index.php/home并允许访问其他模块的实现方法
2016/10/13 PHP
php 类中的常量、静态属性、非静态属性的区别
2017/04/09 PHP
用prototype实现的简单小巧的多级联动菜单
2007/03/24 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
2015/06/15 Javascript
AngularJS基础 ng-submit 指令简单示例
2016/08/03 Javascript
bootstrap导航条实现代码
2016/12/28 Javascript
JavaScript实现移动端轮播效果
2017/06/06 Javascript
jquery点击回车键实现登录效果并默认焦点的方法
2018/03/09 jQuery
JS实现的简单分页功能示例
2018/08/23 Javascript
JavaScript实现模态对话框实例
2020/01/13 Javascript
JS校验与最终登陆界面功能完整示例
2020/01/13 Javascript
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
Python实现子类调用父类的方法
2014/11/10 Python
python3利用Dlib19.7实现人脸68个特征点标定
2018/02/26 Python
python 删除非空文件夹的实例
2018/04/26 Python
selenium+python自动化测试之环境搭建
2019/01/23 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
Python帮你识破双11的套路
2019/11/11 Python
Python中sorted()排序与字母大小写的问题
2020/01/14 Python
PyCharm永久激活方式(推荐)
2020/09/22 Python
Expedia英国:全球最大的在线旅游公司
2017/09/07 全球购物
日本最佳原创设计品牌:Felissimo(芬理希梦)
2019/03/19 全球购物
泰国的头号网上婴儿用品店:Motherhood.co.th
2019/04/09 全球购物
医院护士专业个人的求职信
2013/12/09 职场文书
课程改革实施方案
2014/03/16 职场文书
汉语言文学专业求职信
2014/06/19 职场文书
小学少先队辅导员述职报告
2015/01/10 职场文书
水电工程师岗位职责
2015/02/13 职场文书
考试后的感想
2015/08/07 职场文书
vue代码分块和懒加载非必要资源文件
2022/04/11 Vue.js
单机多实例部署 MySQL8.0.20
2022/05/15 MySQL