简单的Python连接MySQL和EXCEL示例
2013-04-05 19:31
603 查看
这几天又重新回顾了一下Python,当初学习它是因为VB6被微软抛弃后不想再用庞大的.NET工具,毕竟不是专业程序员,对于我来说只需要一个小巧、同时安装方便不需要管理员权限(因为公司电脑强制锁权限)、简单快捷实用的编程工具,Python无论哪方面看都成了我的最佳选择。工作中的数据处理工具一直围绕着EXCEL,但VBA能力所限,而且有些功能实现起来比较复杂,有了Python的辅助明显方便许多,这种动态语言只要有环境连编译都不需要,这让我怀念起当年的MATLAB。
在数据库方面,过去我一直选择实用MSSQL或者ACCESS(姑且称其为数据库吧),但在工作中个人使用SQL比较麻烦,使用ACCESS简单方便(但讨厌的是ACCESS的SQL语言并非标准的SQL)。当时曾想过MySQL似乎是一个不错的选择,可惜用惯了OLEDB和ODBC的我,实在找不到MySQL和EXCEL直接进行数据互传的API或者接口,同时也考虑到数据互传的话没有数据库服务器支持的情况下毕竟ACCESS是比较方便的,于是无奈只好放弃MySQL。
由于最近心血来潮突然想再研究一下Python,找到了Python和MySQL互传的方法,就想到以Python为中介来实现MySQL和EXCEL的数据互传。以下是实现的方法,程序比较简单:利用Python从EXCEL中读取两列数据存储在LIST中然后连接数据库利用insert语句和LIST内容结合,导入数据库;然后再从数据库读取表的字段和内容,存放到EXCEL新表中,由于是示例以核心内容为主错误处理就不写了
(仅供参考):
# -*- coding: utf-8 -*-
"""
Created on Fri Oct 05 23:52:33 2012
@author: zzcwing
"""
#导入模块,需要pywin32和MySQLdb模块,下载地址:
#pywin32: http://sourceforge.net/projects/pywin32/
#MySQLdb:http://sourceforge.net/projects/mysql-python/
#按照说明安装即可
import win32com.client as win32
import MySQLdb
app='Excel'
#启动EXCEL程序
xl=win32.gencache.EnsureDispatch('%s.Application' % app)
#打开相应的EXCEL文件
xlbook=win32.Dispatch('Excel.Application').Workbooks.Open('D:\\pyd\\opsdata.xls')
#读取EXCEL工具表,打开要导入数据的表
sh=xlbook.Worksheets('sheet2')
#建立一个空LIST和两个循环参数
dfun=[]
jcount=2
ncount=1
#从第一列开始向下循环,找到为空的那一行返回行数,即为第ncount行为空
for ncount in range(1,65566):
if sh.Cells(ncount,1).Value==None:
break
else:
continue
#print ncount,测试代码,测试ncount值
#EXCEL的数据安排为第一行是字段,第二行开始是数据,故从第2行开始循环,将两列数据合并到一个LIST中
#LIST结构为[('a','b'),('c','d')]
for jcount in range(2,ncount):
dfun.append((sh.Cells(jcount,1).Value,sh.Cells(jcount,2).Value))
#关闭EXCEL程序
#xl.Application.Quit()
#print dfun,测试代码测试dfun的数据
#建立一个空LIST fo用来存放字段,读取EXCEL中第一行的字段存储到fo中
fo=[]
icount=1
for icount in range(1,2):
fo.append((sh.Cells(1,icount).Value,sh.Cells(1,icount+1).Value))
#测试代码,print fo
#打开MYSQL链接
conn=MySQLdb.connect(host='localhost',user='root',passwd='0.789asd',db='python')
#获取游标操作
cursor=conn.cursor()
#建立一个空表
cursor.execute("create table test("+fo[0][0]+" varchar(100),"+fo[0][1]+" varchar(100));")
#利用executemany命令,将LIST,dfun中的数据通过insert语句写入数据库
cursor.executemany("""insert into test values(%s,%s);""" ,dfun)
#确认数据操作,注意如果没有conn.commit()这个命令,数据无法被插入到数据库中
conn.commit()
#执行查询检查结果
count = cursor.execute('select * from test')
print 'has %s record' % count
#重置游标位置
cursor.scroll(0,mode='absolute')
#搜取所有结果
results = cursor.fetchall()
#测试代码,print results
#获取MYSQL里的数据字段
fields = cursor.description
#将字段写入到EXCEL新表的第一行
sh2=xlbook.Worksheets('sheet3')
#清空sheet3
sh2.Cells.Clear
for ifs in range(1,len(fields)+1):
sh2.Cells(1,ifs).Value=fields[ifs-1][0]
#将读取的数据填入到相应的行列中
ics=2
jcs=1
for ics in range(2,len(results)+2):
for jcs in range(1,len(fields)+1):
sh2.Cells(ics,jcs).Value=results[ics-2][jcs-1]
#关闭EXCEL程序
xl.Application.Quit()
#关闭游标和查询链接
cursor.close()
conn.close()
在数据库方面,过去我一直选择实用MSSQL或者ACCESS(姑且称其为数据库吧),但在工作中个人使用SQL比较麻烦,使用ACCESS简单方便(但讨厌的是ACCESS的SQL语言并非标准的SQL)。当时曾想过MySQL似乎是一个不错的选择,可惜用惯了OLEDB和ODBC的我,实在找不到MySQL和EXCEL直接进行数据互传的API或者接口,同时也考虑到数据互传的话没有数据库服务器支持的情况下毕竟ACCESS是比较方便的,于是无奈只好放弃MySQL。
由于最近心血来潮突然想再研究一下Python,找到了Python和MySQL互传的方法,就想到以Python为中介来实现MySQL和EXCEL的数据互传。以下是实现的方法,程序比较简单:利用Python从EXCEL中读取两列数据存储在LIST中然后连接数据库利用insert语句和LIST内容结合,导入数据库;然后再从数据库读取表的字段和内容,存放到EXCEL新表中,由于是示例以核心内容为主错误处理就不写了
(仅供参考):
# -*- coding: utf-8 -*-
"""
Created on Fri Oct 05 23:52:33 2012
@author: zzcwing
"""
#导入模块,需要pywin32和MySQLdb模块,下载地址:
#pywin32: http://sourceforge.net/projects/pywin32/
#MySQLdb:http://sourceforge.net/projects/mysql-python/
#按照说明安装即可
import win32com.client as win32
import MySQLdb
app='Excel'
#启动EXCEL程序
xl=win32.gencache.EnsureDispatch('%s.Application' % app)
#打开相应的EXCEL文件
xlbook=win32.Dispatch('Excel.Application').Workbooks.Open('D:\\pyd\\opsdata.xls')
#读取EXCEL工具表,打开要导入数据的表
sh=xlbook.Worksheets('sheet2')
#建立一个空LIST和两个循环参数
dfun=[]
jcount=2
ncount=1
#从第一列开始向下循环,找到为空的那一行返回行数,即为第ncount行为空
for ncount in range(1,65566):
if sh.Cells(ncount,1).Value==None:
break
else:
continue
#print ncount,测试代码,测试ncount值
#EXCEL的数据安排为第一行是字段,第二行开始是数据,故从第2行开始循环,将两列数据合并到一个LIST中
#LIST结构为[('a','b'),('c','d')]
for jcount in range(2,ncount):
dfun.append((sh.Cells(jcount,1).Value,sh.Cells(jcount,2).Value))
#关闭EXCEL程序
#xl.Application.Quit()
#print dfun,测试代码测试dfun的数据
#建立一个空LIST fo用来存放字段,读取EXCEL中第一行的字段存储到fo中
fo=[]
icount=1
for icount in range(1,2):
fo.append((sh.Cells(1,icount).Value,sh.Cells(1,icount+1).Value))
#测试代码,print fo
#打开MYSQL链接
conn=MySQLdb.connect(host='localhost',user='root',passwd='0.789asd',db='python')
#获取游标操作
cursor=conn.cursor()
#建立一个空表
cursor.execute("create table test("+fo[0][0]+" varchar(100),"+fo[0][1]+" varchar(100));")
#利用executemany命令,将LIST,dfun中的数据通过insert语句写入数据库
cursor.executemany("""insert into test values(%s,%s);""" ,dfun)
#确认数据操作,注意如果没有conn.commit()这个命令,数据无法被插入到数据库中
conn.commit()
#执行查询检查结果
count = cursor.execute('select * from test')
print 'has %s record' % count
#重置游标位置
cursor.scroll(0,mode='absolute')
#搜取所有结果
results = cursor.fetchall()
#测试代码,print results
#获取MYSQL里的数据字段
fields = cursor.description
#将字段写入到EXCEL新表的第一行
sh2=xlbook.Worksheets('sheet3')
#清空sheet3
sh2.Cells.Clear
for ifs in range(1,len(fields)+1):
sh2.Cells(1,ifs).Value=fields[ifs-1][0]
#将读取的数据填入到相应的行列中
ics=2
jcs=1
for ics in range(2,len(results)+2):
for jcs in range(1,len(fields)+1):
sh2.Cells(ics,jcs).Value=results[ics-2][jcs-1]
#关闭EXCEL程序
xl.Application.Quit()
#关闭游标和查询链接
cursor.close()
conn.close()
相关文章推荐
- Python的SQLalchemy模块连接与操作MySQL的基础示例
- python3.6 使用 pymysql 连接 Mysql 数据库及 简单的增删改查操作
- 简单的连接MySQL与Python的Bottle框架的方法
- python连接mysql调用存储过程示例
- nodejs连接mysql数据库简单封装示例-mysql模块
- 关于python的django的MySQL适配的简单示例
- python 利用pymssql连接MSSQL数据库,简单示例
- python连接mysql并提交mysql事务示例
- Python 2.7_初试连接Mysql查询数据导出到excel_20161216
- python连接mysql简单小程序
- 《PHP---mysql数据连接简单示例》
- python 连接各类主流数据库简单示例【转载】
- Python3连接Mysql(增删改查操作及简单的SQL指令)
- Python2.7简单连接与操作MySQL的方法
- 在PYTHON中,用cx_Oracle连接ORACLE数据库简单示例
- python获得mysql连接的最佳使用示例
- Java 通过 JDBC 连接 MySQL 数据库的简单示例
- Python的SQLalchemy模块连接与操作MySQL的基础示例
- Python 连接MongoDB并比较两个字符串相似度的简单示例