(十)操作数据库、xlrd、xlwt补充
一、补充操作数据库:
1、建立游标时,指定返回的类型是字典
- cur = coon.cursor(cursor=pymysql.cursors.DictCursor)
2、cur.fetchall() #获取到sql执行的全部结果,它把数据库全部数据放到一个list里面
- res = cur.fetchall()
- #>>>[ [],[],[] ]、[{},{},{}]
cur.fetchone() #获取到sql执行的一条结果,他返回只有一条数据
- res = cur.fetchone()
- {'id': 1, 'sex': '女', 'name': 'nny'}
cur.fetchmany() #能传入一个数,返回多少条数据
- res = cur.fetchmany(5)
#如果sql语句执行结果是多条的时候,就用fetchall();
#如果能确定sql执行的结果只取一条数据,就用fetchone()
【例】:操作数据库函数
- #操作数据库函数
- def my_db(sql):
- import pymysql
- host, user, passwd, db = '118.24.3.40','jxz','','jxz'
- coon = pymysql.connect(host = host,user = user,port = 3306,
- passwd = passwd,db = db,charset ='utf8') #建立连接
- #cur = coon.cursor() #建立游标,默认返回的是二维数组
- cur = coon.cursor(cursor=pymysql.cursors.DictCursor) #建立游标,指定cursor类型返回的是字典[{'id': 1, 'name': '你好帅', 'sex': '女'}]
- cur.execute(sql) #执行sql
- if sql.strip()[:6].upper()=='SELECT': #判断sql前几个字母是select,全部转成大写
- #res = cur.fetchall() #判断如果是select语句,直接获取sql执行的全部结果[ [],[],[] ]、[{},{},{}]
- #res = cur.fetchone() #获取到这个sql执行的一条结果,只返回一条数据{'id': 1, 'sex': '女', 'name': 'nny'}
- #res = cur.fetchmany(5) ##能传入一个数,返回多少条数据
- #res = cur.description #返回二维数组,取的是表的字段的内容(('id', 3, None, 11, 11, 0, True),('name', 253, None, 20, 20, 0, True))
- # fileds = []
- # for filed in cur.description: #获取到表字段的内容
- # fileds.append(fileds[0]) #循环第一个元素,导入到excel做表头
- fileds = [filed[0] for filed in cur.description] #列表生成式的形式,节省代码 >>>['id', 'name', 'sex']
- print(fileds)
- else:
- coon.commit() #判断如果不是select语句,就提交一下
- res = 'ok'
- cur.close()
- coon.close()
- return res
- res = my_db('select * from stu limit 10;')
- print(res)
2、enumerate([list1]):自动打印下标和值
- fileds = ['id','name','sex','addr']
- for index,filed in enumerate(fileds):
- print(index,filed)
0 id
1 name
2 sex
3 addr
3、【例】:通用将mysql中的表导出到excel
只要你传入一个表名,就能把所有的数据导出来,字段名是excel的标题
1、动态地获取到表的字段:(表头)
- fileds = [filed[0] for filed in cur.description]
2、获取数据 elect * from "%s"; %table_name
3、循环写入到excel
- import xlwt,pymysql
- def export_excel(tablename):
- host, user, passwd, db = '118.24.3.40', 'jxz', '', 'jxz'
- coon = pymysql.connect(host = host,user = user,port = 3306,
- passwd = passwd,db = db,charset ='utf8') #建立连接
- cur = coon.cursor() #建立游标,返回二维数组
- sql = 'select * from %s;' % tablename
- cur.execute(sql) #执行sql
- fileds = [ i[0] for i in cur.description ] #取到表中的字段(表头)
- all_data = cur.fetchall() # 取到表中的所有的数据
- book = xlwt.Workbook()
- sheet = book.add_sheet('sheet1')
- # col = 0
- # for title in fileds: #将获取的字段,循环写入到excel的表头
- # sheet.write(0,col,title) #第0行,列在变
- # col += 1
- for col,filed in enumerate(fileds): #写表头,enumerate自动循环取下标和列表的值,col=0,1,2...
- sheet.write(0,col,filed)
- #print(all_data) #((1, '小黑马', '男', 28),())
- row = 1 #写数据,从第一行开始写数据
- for data in all_data: #控制行
- for col,filed in enumerate(data): #控制列
- sheet.write(row, col, filed) #1,1 1,2 1,3
- row += 1 #每次写完一行,行就加1
- book.save('%s.xls' % tablename) #将表名作为excel的名字
- export_excel('app_student')
4、读excel ,xlrd
- import xlrd
- book = xlrd.open_workbook('app_student.xls') #打开一个workbook
- sheet = book.sheet_by_index(0) #通过索引定位到sheet页,即sheet1
- sheet = book.sheet_by_name('sheet1') #通过sheet页的名字来定位sheet页
- print(sheet.cell(0,0).value) #指定sheet页的行和列获取到单元格里面的数据>>>text:'id'
- #获取一整行/一整列的数据
- row_list = sheet.row_values(0) #获取到第0行的内容,即表头>>>['id', 'name', 'sex']
- row_list = sheet.row_values(1) #获取到第1行的内容 >>[1.0, '小黑马', '男', 28.0]
- #获取总共有多少行/列
- print(sheet.nrows) #获取到excel表总共有多少行 >>>409(包含一行表头)
- for i in range(sheet.nrows): #n行
- print(sheet.row_values(i)) #循环获取到每行的数据
- print(sheet.ncols) #总共多少列 >>>8
- print(sheet.col_values(0)) #获取到第0列的数据 >>>['id', 1.0, 2.0, 3.0]
5、写excel,xlwt
- import xlwt
book = xlwt.Workbook() #新建一个excel
sheet = book.add_sheet('sheet1') #加一个sheet页
sheet.write(0,0,'姓名') #第1行、第1列,写入的内容
sheet.write(0,1,'年龄') #第1行,第2列
sheet.write(0,2,'性别') #第1行,第3列
book.save('stu.xls') #保存excel,结尾一定要用xls
6、【例】:循环写到excel
import xlwt
book = xlwt.Workbook() #新建一个excel
sheet = book.add_sheet('sheet1') #加一个sheet页
title = ['bugID','name','优先级','描述']
for col,filed in
enumerate(title): #写表头的
sheet.write(0,col,filed)
#第0行,下标即每列,值
row = 1 #行数,除去表头
for i in range(1,sheet.nrows):#从除标题外,第2行开始,取每一行的数据
line = sheet.row_values(i) #循环取到每一行['001','x','xx','xxx']
for col,filed
in enumerate(line): #
写每列数据
sheet.write(row, col, filed) #(1,0,'001'),(1,1,'x'),(1,2,'xx')
row += 1
book.save('app_student1.xls')
7、修改excel (需要安装模块xlutils)
1.先用xlrd模块,打开excel
2.再用xlutils模块的copy方法,复制一份excel
3.再修改复制的excel
- import xlutils,xlwt,xlrd
- from xlutils import copy #这个模块用这种方式导入copy方法
- book = xlrd.open_workbook('app_student.xls') #1.先用xlrd模块,打开excel
- new_book = copy.copy(book) #2.再用xlutils模块的copy方法,复制一份excel
- sheet = new_book.get_sheet(0) #xlutils的方法定位获取到copy的excel的sheet页
- sheet.write(0,0,'编号') #对第几行、第几列进行修改
- sheet.write(0,1,'名字')
- lis = ['编号','名字','性别','年龄','地址','班级','手机号','金币']
- for col,filed in enumerate(lis): #循环修改某一行
- sheet.write(0,col,filed)
- new_book.save('app_student.xls')
(十)操作数据库、xlrd、xlwt补充的更多相关文章
- 使用Python对Excel表格进行简单的读写操作(xlrd/xlwt)
算是一个小技巧吧,只是进行一些简单的读写操作.让人不爽的是xlrd和xlwt是相对独立的,两个模块的对象不能通用,读写无法连贯操作,只能单独读.单独写,尚不知道如何解决. #①xlrd(读) #cod ...
- 【python】操作excel——xlrd xlwt xlutils
from xlutils.copy import copy import xlrd # import xlutils #打开已存在的excel rb=xlrd.open_workbook('D:\\1 ...
- 孤荷凌寒自学python第四十四天Python操作 数据库之准备工作
孤荷凌寒自学python第四十四天Python操作数据库之准备工作 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天非常激动地开始接触Python的数据库操作的学习了,数据库是系统化设计 ...
- Python操作Excel——win32com模块和xlrd+xlwt+xlutils组合
今天,接到一个任务,要生成大约两百个excel文件,从2006年到2013年,每个月两个文件,这些文件中除了几个关于日期的单元格不同外,其他数据都相同,所以就想到可以用python写一个小脚本,自动生 ...
- 【转】python操作excel表格(xlrd/xlwt)
[转]python操作excel表格(xlrd/xlwt) 最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异, ...
- 转载:python操作excel表格(xlrd/xlwt)
python操作excel表格(xlrd/xlwt) 最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而 ...
- xpython操作excel之xlwt与xlrd
xlwt与xlrd只能针对xls格式的excel进行操作!!!(openpyxl操作excel) xlwt写excel # pip install xlwt下载导入xlwt写xls格式的excel操作 ...
- Python常用的数据文件存储的4种格式(txt/json/csv/excel)及操作Excel相关的第三方库(xlrd/xlwt/pandas/openpyxl)(2021最新版)
序言:保存数据的方式各种各样,最简单的方式是直接保存为文本文件,如TXT.JSON.CSV等,除此之外Excel也是现在比较流行的存储格式,通过这篇文章你也将掌握通过一些第三方库(xlrd/xlwt/ ...
- 十五、JDBC操作数据库
1.数据库特点 实现数据共享.减少数据的冗余度.数据的独立性.数据集中控制.数据的一致性和可维护性. 2.数据库种类和功能 (1)层次型数据库:类似于树结构,是一组通过链接而互相联系在一起的记录. ( ...
随机推荐
- MacOS:Django + Python3 + MySQL
Django Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的框架模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站 ...
- [转]Win2012的 IIS 503 错误
下载并安装 https://www.microsoft.com/zh-CN/download/details.aspx?id=48145 因为安装了 dotnet-hosting-2.2.3-win. ...
- 20175236 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
一.实验报告封面 课程:Java程序设计 班级:1752班 姓名:温丰帆 学号:20175236 指导教师:娄嘉鹏 实验日期:2019年4月2日 实验时间:13:45 - 15:25 实验序号:实验一 ...
- linux下怎么清理缓存
free -m 命令可以查看内存使用情况 sysctl 命令可以临时改变某个系统参数 如:sysctl -w net.ipv4.ip_forward=1 是将forware参数临时改为1 当 ser ...
- connected standby
参考链接 https://docs.microsoft.com/en-us/windows-hardware/design/device-experiences/modern-standby http ...
- js判断是否安装某个android app,没有安装下载该应用(websocket通信,监听窗口失去焦点事件)
现在经常有写场景需要提示用户下载app, 但是如果用户已经安装,我们希望是直接打开app. 实际上,js是没有判断app是否已经安装的方法的,我们只能曲线救国. 首先,我们需要有call起app的sc ...
- 关于new你应当知道的一切
new在C++中是一个我们经常用到的运算符.由它所创建的变量会被分配在堆中,并且在程序结束之前应当将分配的内存delete掉,否则就会导致内存泄漏.但是除此之外,你对new有更深入的了解吗?本篇文章将 ...
- Unity Post-Processing的一些分享
讲些什么? 绝大多数的游戏或多或少都会使用些后处理效果. 早期版本中,Unity在提供的接口有限,优化空间不大,属于放任自流.官方推出了Post-Processing(下文简称PP)并在Github上 ...
- css修改整个项目的滚动条样式
在项目中,滚动条不可避免的药出现.设置统一规范的滚动条也是必然.用一个独立的css文件即可修改整个项目中的滚动条样式 . scrollBar.css: /* 滚动条有滑块的轨道部分 */ ::-web ...
- js 索引数组转JSON为空
let a = [] a.a = 1 console.log(a) // [a: 1] console.log(JSON.stringify(a)) // [] 当然js根本没索引数组一说,这是php ...