python3 使用openpyxl将mysql数据写入xlsx的操作


Posted in Python onMay 15, 2020

编程的生活愈发不容易了,工作越来越难找,说多了都是泪还是给大家贡献些代码比较实际。

python3 链接数据库需要下载名为pymysql的第三方库

python3 读写xlsx需要下载名为openpyxl的第三方库

在此我只贡献链接数据库和写入xlsx的代码

import pymysql.cursors
from fj.util import logger
from openpyxl import Workbook
from openpyxl.compat import range
from openpyxl.utils import get_column_letter
 
# 链接数据库的游标
connect = pymysql.Connect(
  host="localhost",
  port=3306,
  user='root',
  passwd='123456',
  db='zyDB',
  charset='utf8',
)
cursor = connect.cursor()
 
# 关闭数据库链接操作
def clos_cursor():
  return cursor.close();
 
# 读取数据库数据
def query_all():
  select_sql = "select*from fj_date where fj_id not in" \
         "( select a.fj_id from ( select * from fj_date where mj_id>0 ) a " \
         "join ( SELECT * from fj_date where jb_id>0 ) b" \
         " on a.fjzz = b.fjzz and a.fj_add=b.fj_add) and mj_id>0"
  cursor.execute(select_sql);
  return cursor.fetchall();
 
# 关闭数据库链接操作
def clos_cursor():
   cursor.close();
   connect.close()
 
def read_mysql_to_xlsx():
 
  #要创建的xlsx名称
  dest_filename = 'jb_data.xlsx'
 
  wb = Workbook()
  ws1 = wb.active
  ws1.title = "fj_date"
  # 列名
  ws1.cell(row=1,column=1,value="fj_id(数据库编号)")
  ws1.cell(row=1,column=2,value="jb_id(疾病编号)")
  ws1.cell(row=1,column=3,value="mj_id(名医编号)")
  ws1.cell(row=1,column=4,value="fj_name(方剂名称)")
  ws1.cell(row=1,column=5,value="fjcc(出处)")
  ws1.cell(row=1,column=6,value="fjdm(代码)")
  ws1.cell(row=1,column=7,value="fjzc(加减)")
  ws1.cell(row=1,column=8,value="fjgx(功效)")
  ws1.cell(row=1,column=9,value="fj_add(组成)")
  ws1.cell(row=1,column=10,value="fjjj(禁忌)")
  ws1.cell(row=1,column=11,value="fjzy(方剂治验)")
  ws1.cell(row=1,column=12,value="fjzz(主治)")
  ws1.cell(row=1,column=13,value="fjyf(用法)")
  ws1.cell(row=1,column=14,value="ylzy(药理作用)")
  ws1.cell(row=1,column=15,value="gjls(各家论述)")
  ws1.cell(row=1,column=16,value="fj(方解)")
  ws1.cell(row=1,column=17,value="ks(科室)")
  ws1.cell(row=1,column=18,value="ckzl(参考资料)")
  ws1.cell(row=1,column=19,value="lcyy(临床应用)")
  ws1.cell(row=1,column=20,value="tjbq(推荐标签)")
  ws1.cell(row=1,column=21,value="zysx(注意事项)")
  ws1.cell(row=1,column=22,value="fjzb(制备方法)")
  ws1.cell(row=1,column=23,value="fg(方歌)")
  ws1.cell(row=1,column=24,value="path(路径)")
  # 循环数据写入内容
  jb_date_list = query_all()
  for i in range(2,len(jb_date_list)+1):
    ws1.cell(row=i, column=1, value=jb_date_list[i-1][0])
    ws1.cell(row=i, column=2, value=jb_date_list[i-1][1])
    ws1.cell(row=i, column=3, value=jb_date_list[i-1][2])
    ws1.cell(row=i, column=4, value=jb_date_list[i-1][3])
    ws1.cell(row=i, column=5, value=jb_date_list[i-1][4])
    ws1.cell(row=i, column=6, value=jb_date_list[i-1][5])
    ws1.cell(row=i, column=7, value=jb_date_list[i-1][6])
    ws1.cell(row=i, column=8, value=jb_date_list[i-1][7])
    ws1.cell(row=i, column=9, value=jb_date_list[i-1][8])
    ws1.cell(row=i, column=10, value=jb_date_list[i-1][9])
    ws1.cell(row=i, column=11, value=jb_date_list[i-1][10])
    ws1.cell(row=i, column=12, value=jb_date_list[i-1][11])
    ws1.cell(row=i, column=13, value=jb_date_list[i-1][12])
    ws1.cell(row=i, column=14, value=jb_date_list[i-1][13])
    ws1.cell(row=i, column=15, value=jb_date_list[i-1][14])
    ws1.cell(row=i, column=16, value=jb_date_list[i-1][15])
    ws1.cell(row=i, column=17, value=jb_date_list[i-1][16])
    ws1.cell(row=i, column=18, value=jb_date_list[i-1][17])
    ws1.cell(row=i, column=19, value=jb_date_list[i-1][18])
    ws1.cell(row=i, column=20, value=jb_date_list[i-1][19])
    ws1.cell(row=i, column=21, value=jb_date_list[i-1][20])
    ws1.cell(row=i, column=22, value=jb_date_list[i-1][21])
    ws1.cell(row=i, column=23, value=jb_date_list[i-1][22])
    ws1.cell(row=i, column=24, value=jb_date_list[i-1][23])
 
  # 创建xlsx
  wb.save(filename=dest_filename)
 
if __name__ == '__main__':
  read_mysql_to_xlsx()

补充知识:Python 关闭文件释放内存的疑惑

我用with语句打开了一个4g的文件读取内容,然后程序末尾设置一个死循环,按理说with语句不是应该自动关闭文件释放资源吗?

但是系统内存一直没有释放。应该是被文件读取到的变量content一直占用吗?把content删除就会释放内存。或者去掉死循环,程序退出资源就自动释放了

既然这样的话关闭文件貌似没啥作用呢?具体释放了什么资源?

Python一直占用着将近5G的内存:

python3 使用openpyxl将mysql数据写入xlsx的操作

官方文档:

If you're not using the with keyword, then you should call f.close() to close the file and immediately free up any system resources used by it. If you don't explicitly close a file, Python's garbage collector will eventually destroy the object and close the open file for you, but the file may stay open for a while. Another risk is that different Python implementations will do this clean-up at different times.

After a file object is closed, either by a with statement or by calling f.close(), attempts to use the file object will automatically fail.

代码如下:

import sys
with open(r'H:\BaiduNetdiskDownload\4K.mp4','rb') as f:
  print(f.closed)
  content=f.read()
print(f.closed)
print(sys.getrefcount(f))
while True:
  pass

以上这篇python3 使用openpyxl将mysql数据写入xlsx的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
12步教你理解Python装饰器
Feb 25 Python
浅谈python内置变量-reversed(seq)
Jun 21 Python
一篇文章读懂Python赋值与拷贝
Apr 19 Python
Python系统监控模块psutil功能与经典用法分析
May 24 Python
Python实现爬虫爬取NBA数据功能示例
May 28 Python
python实现支付宝当面付(扫码支付)功能
May 30 Python
Python批处理删除和重命名文件夹的实例
Jul 11 Python
python中的tcp示例详解
Dec 09 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
Feb 29 Python
Python 如何在字符串中插入变量
Aug 01 Python
Python 实现微信自动回复的方法
Sep 11 Python
python 实现学生信息管理系统的示例
Nov 28 Python
使用Python实现将多表分批次从数据库导出到Excel
May 15 #Python
解决python执行较大excel文件openpyxl慢问题
May 15 #Python
python可迭代对象去重实例
May 15 #Python
python 操作mysql数据中fetchone()和fetchall()方式
May 15 #Python
Python实现UDP程序通信过程图解
May 15 #Python
解决pymysql cursor.fetchall() 获取不到数据的问题
May 15 #Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
May 15 #Python
You might like
2020显卡排行榜天梯图 显卡天梯图2020年3月最新版
2020/04/02 数码科技
php正则表达式(regar expression)
2011/09/10 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
2020/04/06 PHP
利用javascript移动div层-javascript 拖动层
2009/03/22 Javascript
js单向链表的具体实现实例
2013/06/21 Javascript
jquery防止重复执行动画避免页面混乱
2014/04/22 Javascript
javascript实现点击提交按钮后显示loading的方法
2015/07/03 Javascript
JS自定义函数对web前端上传的文件进行类型大小判断
2016/10/19 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
JS简单封装的图片无缝滚动效果示例【测试可用】
2017/03/22 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
JavaScript编程设计模式之构造器模式实例分析
2017/10/25 Javascript
vue父组件异步获取数据传给子组件的方法
2018/07/26 Javascript
Vue实现push数组并删除的例子
2019/11/01 Javascript
微信小程序订阅消息(java后端实现)开发
2020/06/01 Javascript
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
利用python模拟sql语句对员工表格进行增删改查
2017/07/05 Python
Python连接phoenix的方法示例
2017/09/29 Python
python+django加载静态网页模板解析
2017/12/12 Python
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
python实现淘宝秒杀脚本
2020/06/23 Python
使用Python将Mysql的查询数据导出到文件的方法
2019/02/25 Python
pandas的相关系数与协方差实例
2019/12/27 Python
PyTorch中topk函数的用法详解
2020/01/02 Python
python爬虫开发之selenium模块详细使用方法与实例全解
2020/03/09 Python
Numpy ndarray 多维数组对象的使用
2021/02/10 Python
html5 canvas 简单画板实现代码
2012/01/05 HTML / CSS
阿玛尼化妆品美国官网:Giorgio Armani Beauty
2017/02/02 全球购物
任意存:BOXFUL
2018/05/21 全球购物
毕业生自我推荐
2013/11/04 职场文书
会计应聘求职信范文
2013/12/17 职场文书
食品安全检查制度
2014/02/03 职场文书
党员干部一句话承诺
2014/05/30 职场文书
财务管理专业求职信
2014/06/11 职场文书
python开发实时可视化仪表盘的示例
2021/05/07 Python
Python中字符串对象语法分享
2022/02/24 Python