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 相关文章推荐
进一步探究Python中的正则表达式
Apr 28 Python
在SAE上部署Python的Django框架的一些问题汇总
May 30 Python
Python实现删除时保留特定文件夹和文件的示例
Apr 27 Python
python截取两个单词之间的内容方法
Dec 25 Python
python绘制已知点的坐标的直线实例
Jul 04 Python
在linux系统下安装python librtmp包的实现方法
Jul 22 Python
3行Python代码实现图像照片抠图和换底色的方法
Oct 10 Python
python脚本调用iftop 统计业务应用流量的思路详解
Oct 11 Python
python argparser的具体使用
Nov 10 Python
tensorflow生成多个tfrecord文件实例
Feb 17 Python
Python和Bash结合在一起的方法
Nov 13 Python
Anaconda安装pytorch及配置PyCharm 2021环境
Jun 04 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
CMSPRESS 10行代码搞定 PHP无限级分类2
2018/03/30 PHP
function, new function, new Function之间的区别
2007/03/08 Javascript
jquery实现table鼠标经过变色代码
2013/09/25 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
JavaScript中常用的六种互动方法示例
2015/03/13 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题
2016/08/03 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
jQuery通过ajax快速批量提交表单数据
2016/10/25 Javascript
微信小程序 点击控件后选中其它反选实例详解
2017/02/21 Javascript
Vue中添加手机验证码组件功能操作方法
2017/12/07 Javascript
axios取消请求的实践记录分享
2018/09/26 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
layer.alert回调函数执行关闭弹窗的实例
2019/09/11 Javascript
vue iview 隐藏Table组件里的某一列操作
2020/11/13 Javascript
[02:36]DOTA2英雄基础教程 斯拉克
2013/11/29 DOTA
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
python实现简单遗传算法
2018/03/19 Python
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
使用Python画股票的K线图的方法步骤
2019/06/28 Python
Django 开发环境与生产环境的区分详解
2019/07/26 Python
Django接收自定义http header过程详解
2019/08/23 Python
django使用xadmin的全局配置详解
2019/11/15 Python
深入浅析Python 函数注解与匿名函数
2020/02/24 Python
python网络编程socket实现服务端、客户端操作详解
2020/03/24 Python
Python实现石头剪刀布游戏
2021/01/20 Python
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
在线服装零售商:SheIn
2016/07/22 全球购物
加拿大当代时尚服饰、配饰和鞋类专业零售商和制造商:LE CHÂTEAU
2017/10/06 全球购物
乌克兰网上珠宝商店:GoldSoveren
2020/03/31 全球购物
感恩教育月活动总结
2014/07/07 职场文书
2014年师德师风工作总结
2014/11/25 职场文书
入党现实表现材料
2014/12/23 职场文书
2015年公务员试用期工作总结
2015/05/28 职场文书
JavaScript最完整的深浅拷贝实现方式详解
2022/02/28 Javascript