用python脚本导出mysql数据库查询结果到Excel表

最近需要导数据的情况太多,总用跳板机上的navicat工具有点效率低,也觉得挺麻烦的(由于跳板机无法连通外网 所以导出数据文件还得通过sftp传到本机)
anyway 还是写个脚本好了。之前写过一个shell脚本做的定时导出任务,现在试试用python写下

主要用到的库有:
pymysql -- 连数据库的无需多说
os & sys -- 可能回涉及到工作目录或者外部传参
xlwt -- 写excel

下面就是代码了,总体还是挺简单的,主要遇到个字符编码的问题,改成utf-8就解决了
还有个没解决掉的问题: select的结果没有字段名,所以....文件第一行的字段我是手动加进去的 =.=

#!/usr/bin/python
# -*- coding: cp936 -*-
# security:数据库相关的敏感参数最好通过传参形式传入而非写入脚本

import pymysql
import xlwt
import os,sys

def dbConnect(dburl):
    db_user = sys.argv[1]
    db_pass = sys.argv[2]
    db_name = raw_input("要使用的数据库:")
    db_conn = pymysql.connect(dburl,db_user, db_pass, db_name)# db_name传参失败?编码问题"?"
    return db_conn

def sqlOpt(opt):
    db_conn = dbConnect("localhost")
    cur     = db.cursor()
    cur.execute(opt)
    data    = cur.fetchall()
    db_conn.close()
    return data

def write_to_excel(content):
    os.chdir("/home/appuser/export_mysql_data/")
    filename   = raw_input("请输入要保存的文件名,无需后缀:") + ‘.xls‘
    wbk        = xlwt.Workbook(encoding=‘utf-8‘)
    test       = wbk.add_sheet(‘test‘,cell_overwrite_ok=True)
    # ?如何获取列名
    fileds     = [u‘ID‘,u‘name‘,u‘sex‘,u‘birth‘,u‘department‘,u‘address‘]
    trans_data = list(content)
    # 写入列名
    for filed in range(0,len(fileds)):
        test.write(0,filed,fileds[filed])
    for row in range(1,len(trans_data)+1):
        for col in range(0,len(fileds)):
            test.write(row,col,str(trans_data[row-1][col]))
    wbk.save(filename)

def run_Task():
    sql    = raw_input("请输入sql查询语句:")
    result = sqlOpt(sql)
    write_to_excel(result)

run_Task()

原文地址:http://blog.51cto.com/healerj9/2306479

时间: 2024-10-07 06:35:07

用python脚本导出mysql数据库查询结果到Excel表的相关文章

Python脚本---把MySQL数据库表中的数据导出生成csv格式文件

转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/45841221 #!/usr/bin/env python # -*- coding:utf-8 -*- """  Purpose: 生成日汇总对账文件  Created: 2015/4/27  Modified:2015/5/1  @author: guoyJoe""" #导入模块import MySQLdbimport timeimpo

利用Python脚本备份mysql数据库

近期利用空余时间学习了python的一些基础内容,用来实践,做了一个Mysql备份的脚本,按日备份并打包压缩:python比原来的shell只能运行在linux下面更广泛一些,而且后期扩展也更好. ################################## Functions: 1)按日备份数据库,并将备份文件压缩打包: 2)成功则将备份信息写入日志,失败则发邮件告警给管理员: 3)如果已经备份成功,不再重复备份: 4)稍作改动,可用于WINDOWS备份 ###############

Python脚本---在 MySQL数据库中跑批加载多个表的数据

转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/45841117 #!/usr/bin/env python # -*- coding:utf-8 -*- """  Purpose: 生成日明细账单数据  Created: 2015/4/21  Modified:2015/4/24  @author: guoyJoe"""#导入模块import MySQLdbimport timeimpo

shell 脚本连接mysql数据库查询database中表的数量和表名

#!/bin/bash MYSQLHOST="127.0.0.1" MYSQLUSER="root" MYSQLPWD="root" MYSQLPORT="3306" MYSQLDB="test" echo "health tables total:" > mysqlCount.txt; mysql -h$MYSQLHOST -u$MYSQLUSER -p$MYSQLPWD -P$

Python脚本---备份MySQL数据库

转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/45848057 #!/usr/bin/env python # -*- coding:utf-8 -*- #导入模块import MySQLdbimport timeimport datetimeimport os """  Purpose: 备份数据库  Created: 2015/5/12  Modified:2015/5/12  @author: guoyJoe&

人生第一个python脚本:从数据库查询数据并发送邮件

#!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb import smtplib from email.mime.text import MIMEText from email.header import Header import time date = time.strftime('%Y-%m-%d') # 打开数据库连接 conn = MySQLdb.connect( host='localhost', port = 3306,

MySQL实验准备(二)--Python模拟数据(MySQL数据库)

Python模拟数据(MySQL数据库) 数据模拟 目的:模拟多个表的插入和查询数据的模拟,再通过基准测试脚本测试服务器性能和收集数据,仿真模拟. 备注: 如果需要基础的python环境,可以查看<MySQL实验准备(一)--环境准备>文档 实验脚本 通过对一个简单表的脚本插入和查询模拟,后面能 举一反三,完成多张表的多表插入,多线程的多表插入,多线程查询,和多线程的join查询. 数据库的表结构 mysql> show create table zdemo.student; +----

mysqldump导入导出mysql数据库

body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;}

使用mysqldump导入导出MySQL数据库

数据库的基本导入\导出的命令 是 mysqldump 和 source 在linux下直接用命令行操作就可以 在windows下 一般情况下有两种方法一个也是用命令行 另一个是用phpmyadmin 先 来说说phpmyadmin 这个工具导出和导入很简单 而且导入时无需建库 直接还原成原来的数据库 用source 也可以还原 但他导入文件时有大小限制不能超过2M 再来说说 mysqldump 和 source 用命令操作很快 但是想把导出的文件再导入时必须先建立一个数据库(这个库可以随便起名)