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程序生成word和PDF文档的方法
Feb 14 Python
Python编程之gui程序实现简单文件浏览器代码
Dec 08 Python
pip安装py_zipkin时提示的SSL问题对应
Dec 29 Python
Python中如何导入类示例详解
Apr 17 Python
TensorFlow:将ckpt文件固化成pb文件教程
Feb 11 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
Mar 06 Python
python TCP包注入方式
May 05 Python
python 使用递归的方式实现语义图片分割功能
Jul 16 Python
如何使用python socket模块实现简单的文件下载
Sep 04 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
Oct 22 Python
Python wordcloud库安装方法总结
Dec 31 Python
PyTorch device与cuda.device用法
Apr 03 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
php strcmp使用说明
2010/04/22 PHP
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
HTML node相关的一些资料整理
2010/01/01 Javascript
JQuery魔力之$("tagName")与selector
2012/03/05 Javascript
javascript中日期转换成时间戳的小例子
2013/03/21 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
2014/08/20 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
微信JS接口大全
2016/08/25 Javascript
jquery 动态增加删除行的简单实例(推荐)
2016/10/12 Javascript
简单几步实现返回顶部效果
2016/12/05 Javascript
jQuery图片瀑布流的简单实现代码
2017/03/15 Javascript
微信JSSDK调用微信扫一扫功能的方法
2017/07/25 Javascript
浅谈Vue SPA 首屏加载优化实践
2017/12/15 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
2018/09/17 Javascript
Vue 页面状态保持页面间数据传输的一种方法(推荐)
2018/11/01 Javascript
JavaScript键盘事件常见用法实例分析
2019/01/03 Javascript
javascript异步编程的六种方式总结
2019/05/17 Javascript
Vue 自适应高度表格的实现方法
2020/05/13 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
2020/09/29 Javascript
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
2008/09/06 Python
Python读写Excel文件方法介绍
2014/11/22 Python
对python遍历文件夹中的所有jpg文件的实例详解
2018/12/08 Python
python简单区块链模拟详解
2019/07/03 Python
PyCharm下载和安装详细步骤
2019/12/17 Python
pytorch进行上采样的种类实例
2020/02/18 Python
Python批量将图片灰度化的实现代码
2020/04/11 Python
巧用 CSS3的webkit-box-reflect 倒影实现各类动效
2021/03/05 HTML / CSS
世界首屈一指的钓鱼用品商店:TackleDirect
2016/07/26 全球购物
巴西最大的体育用品商城:Netshoes巴西
2016/11/29 全球购物
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
几道数据库的概念性面试题
2014/05/30 面试题
自我评价格式
2014/01/06 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
五一劳动节活动总结
2015/02/09 职场文书
培养联系人考察意见
2015/06/01 职场文书
开发一个封装iframe的vue组件
2021/03/29 Vue.js