当前位置:   article > 正文

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

python输入执行数据库查询脚本导出为excel

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

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

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

  1. #!/usr/bin/python
  2. # -*- coding: cp936 -*-
  3. # security:数据库相关的敏感参数最好通过传参形式传入而非写入脚本
  4. import pymysql
  5. import xlwt
  6. import os,sys
  7. def dbConnect(dburl):
  8. db_user = sys.argv[1]
  9. db_pass = sys.argv[2]
  10. db_name = raw_input("要使用的数据库:")
  11. db_conn = pymysql.connect(dburl,db_user, db_pass, db_name)# db_name传参失败?编码问题"?"
  12. return db_conn
  13. def sqlOpt(opt):
  14. db_conn = dbConnect("localhost")
  15. cur = db.cursor()
  16. cur.execute(opt)
  17. data = cur.fetchall()
  18. db_conn.close()
  19. return data
  20. def write_to_excel(content):
  21. os.chdir("/home/appuser/export_mysql_data/")
  22. filename = raw_input("请输入要保存的文件名,无需后缀:") + '.xls'
  23. wbk = xlwt.Workbook(encoding='utf-8')
  24. test = wbk.add_sheet('test',cell_overwrite_ok=True)
  25. # ?如何获取列名
  26. fileds = [u'ID',u'name',u'sex',u'birth',u'department',u'address']
  27. trans_data = list(content)
  28. # 写入列名
  29. for filed in range(0,len(fileds)):
  30. test.write(0,filed,fileds[filed])
  31. for row in range(1,len(trans_data)+1):
  32. for col in range(0,len(fileds)):
  33. test.write(row,col,str(trans_data[row-1][col]))
  34. wbk.save(filename)
  35. def run_Task():
  36. sql = raw_input("请输入sql查询语句:")
  37. result = sqlOpt(sql)
  38. write_to_excel(result)
  39. run_Task()

----------------------------------------------------------------分割线----------------------------------------------------------------------------
11.1更
解决了手动输入列名的问题,代码更改如下:

  1. import pymysql
  2. import xlwt
  3. import os
  4. # import pandas as pd
  5. # database conn
  6. def dbConnect(dburl):
  7. db_user = 'developer'
  8. db_pass = '1qaz2wsx#EDC'
  9. # db_name = input("要使用的数据库:")
  10. db_conn = pymysql.connect(dburl, db_user, db_pass)
  11. return db_conn
  12. #获取列名
  13. def getCol(opt):
  14. db_conn = dbConnect("10.1.188.241")
  15. cursor = db_conn.cursor()
  16. cursor.execute(opt)
  17. col = tuple([tuple[0] for tuple in cursor.description])
  18. db_conn.close()
  19. return col
  20. #获取数据
  21. def sqlOpt(opt):
  22. db_conn = dbConnect("10.1.188.241")
  23. cursor = db_conn.cursor()
  24. cursor.execute(opt)
  25. data = cursor.fetchall()
  26. # final_data = col + data
  27. db_conn.close()
  28. return data
  29. # 写入文件
  30. def write_into_excel(col_name, content):
  31. os.chdir("D:\whj")
  32. filename = input("请输入要保存的文件名,无需后缀:") + '.xls'
  33. wbk = xlwt.Workbook(encoding='utf-8')
  34. test = wbk.add_sheet('test', cell_overwrite_ok=True)
  35. fileds = list(col_name)
  36. trans_data = list(content)
  37. # 写入列名
  38. for filed in range(0, len(fileds)):
  39. test.write(0, filed, fileds[filed])
  40. for row in range(1, len(trans_data)+1):
  41. for col in range(0, len(fileds)):
  42. test.write(row, col, u'%s' % str(trans_data[row-1][col]))
  43. wbk.save(filename)
  44. # 主函数
  45. def run_Task():
  46. sql = "select name,phone from wechat.sys_user;"
  47. result = sqlOpt(sql)
  48. col_name = getCol(sql)
  49. # print(result)
  50. # print(col_name)
  51. write_into_excel(col_name, result)
  52. run_Task()

转载于:https://blog.51cto.com/healerj9/2306479

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/967425
推荐阅读
相关标签
  

闽ICP备14008679号