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代码(逐级优化)
May 25 Python
用Python编写一个基于终端的实现翻译的脚本
Apr 24 Python
python链接Oracle数据库的方法
Jun 28 Python
Python中的多行注释文档编写风格汇总
Jun 16 Python
DataFrame 将某列数据转为数组的方法
Apr 13 Python
python与字符编码问题
May 24 Python
PowerBI和Python关于数据分析的对比
Jul 11 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
Sep 07 Python
Python3.8对可迭代解包的改进及用法详解
Oct 15 Python
Pycharm创建项目时如何自动添加头部信息
Nov 14 Python
python实现从ftp服务器下载文件
Mar 03 Python
Appium+Python实现简单的自动化登录测试的实现
Jan 26 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实现xml转换数组的方法示例
2017/02/03 PHP
php提高脚本性能的4个技巧
2020/08/18 PHP
javascript中slice(),splice(),split(),substring(),substr()使用方法
2015/03/13 Javascript
在JavaScript中call()与apply()区别
2016/01/22 Javascript
jQuery联动日历的实例解析
2016/12/02 Javascript
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
jQuery Datatable 多个查询条件自定义提交事件(推荐)
2017/08/24 jQuery
echarts整合多个类似option的方法实例
2018/07/10 Javascript
详解mpvue中小程序自定义导航组件开发指南
2019/02/11 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
2021/01/08 Vue.js
[26:21]浴火之凤-TI4世界冠军Newbee战队纪录片
2014/08/07 DOTA
[47:35]VP vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
python基础教程之类class定义使用方法
2014/02/20 Python
Python中使用SAX解析xml实例
2014/11/21 Python
Python实现Tab自动补全和历史命令管理的方法
2015/03/12 Python
Python中字典和集合学习小结
2017/07/07 Python
python使用super()出现错误解决办法
2017/08/14 Python
神经网络理论基础及Python实现详解
2017/12/15 Python
Python最小二乘法矩阵
2019/01/02 Python
python 调用有道api接口的方法
2019/01/03 Python
python实现画五角星和螺旋线的示例
2019/01/20 Python
Python 隐藏输入密码时屏幕回显的实例
2019/02/19 Python
Python定义函数功能与用法实例详解
2019/04/08 Python
python分数表示方式和写法
2019/06/26 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
2020/08/07 Python
美国标志性加大尺码时装品牌:Ashley Stewart
2016/12/15 全球购物
公司行政经理岗位职责
2013/12/24 职场文书
会计岗位说明书
2014/07/29 职场文书
2015年幼儿园新年寄语
2014/12/08 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
三严三实·严以律己心得体会
2016/01/13 职场文书
接收函
2019/04/22 职场文书
导游词之舟山普陀山
2019/11/06 职场文书
Python基础之教你怎么在M1系统上使用pandas
2021/05/08 Python
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python