python excel、redis、接口
一、excel
1、修改excel
import xlrd
from xlutils import copy
book = xlrd.open_workbook('app_student.xls')#先用xlrd模块,打开一个excl
new_book =copy.copy(book)#通过xlutils 这个模块里面copy方法,复制一份excel
sheet = new_book.get_sheet(0) #获取sheet页
sheet.write(0,0,'编号')
sheet.write(0,1,'名字')
new_book.save('app_student.xls')
#循环修改
book = xlrd.open_workbook('app_student.xls')#先用xlrd模块,打开一个excl
new_book =copy.copy(book)#通过xlutils 这个模块里面copy方法,复制一份excel
sheet = new_book.get_sheet(0) #获取sheet页
lis = ['编号','名字','性别','年龄','地址','班级','手机号','金币']
for i,filed in enumerate(lis):
sheet.write(0,i,filed)
new_book.save('app_student.xl')
2、读excel
import xlrd
book = xlrd .open_workbook('app_student.xls')
sheet = book.sheet_by_index(0) #根据index获取到单元表中的第一个sheet页
sheet = book.sheet_by_name('sheel')根据名字获取到单元表中的sheet页
print(sheet.cell(0,0))#指定sheet页里面行和列获取数据
print(sheet.cell(1,0))#指定sheet页里面行和列获取数据
print(sheet.row_values(0)) #这个是获取到第几行的内容
print(sheet.nrows)#获取到excel里面总共有多少行
for i in range(sheet.nrows): #打印出多少行
print(sheet.row_values(i))#循环打印出每行的数据
print(sheet.ncols) #总共多少列
print(sheet.col_values(0))#获取第几列的数据
for i in range(sheet.ncols): #打印出多少列
print(sheet.col_values(i))#循环打印出每列的数据
3、通用导出数据数据
def export_excel(table_name):
host = ''
user = ''
passwd = ''
db = ''
coon = pymysql.connect(host=host, user=user,passwd=passwd,port=3306, db=db, charset='utf8')
cur = coon.cursor() # 建立游标
sql = 'select * from %s ;'%table_name
cur.execute(sql)
fileds = [filed[0] for filed in cur.description]#所有字段
all_data = cur .fetchall()
book = xlwt.Workbook()
sheet = book.add_sheet('sheetl')
for col , filed in enumerate (fileds):
sheet.write(0,col,filed)
row=1
for data in all_data: #行
for col, filed in enumerate(data): #控制列
sheet.write(row, col, filed)
row +=1 #每次写完一行行数+1
book.save('%s.xls'%table_name)
export_excel('app_student')
二、 redis 数据库
redis 也是一个数据库
数据库分为:关系型数据库和非关系型数据库
关系型数据库:mysql 、orace、sql、server、db2、sqlite 关系型数据库数据存在磁盘中
非关系型数据库:没有表结构,所以比传统的数据库类型速度会比较快,sql get('k'),set('kk')例如 有mongodb,redis
redis数据全部都是内存里面,本身每秒支持30万次的读写,本身性能很好,缺点在于不能把数据持久化
import redis
r = redis.Redis(host='',password='',db=1,port=)
1、增加 key值不能重复
r.set('niuhanyang1','帅!') #数据库里面新增了一个值
2、修改也是set
3、删除 r.delete('yy:zhangsan')
r.setex('zch','hhh',30) # 设置key的失效时间,最后一个参数是秒,30秒表示30秒后失效
4、查询
print(r.get('hwt'))#输出b'\xe5\xb8\x85\xef\xbc\x81hdyt',前b是二进制
print(r.get('gagdag'))#如果get的值不存在返回None
hwt = r.get('hwt')
print(hwt.decode()) #修改二进制(bytes类型)转化为字符串
s='很好'
s.encode()#把字符串转换成二进制
print(r.keys(('niu*')))#获取到所有的以niu结尾的key值
print(r.keys(('fdafd*')))#获取到所有的以niu结尾的key值
5、添加文件夹
r.set('yy:mpp','hhh') #如果key中存在:,:前面的值就是文件夹,只要:前面值一样后面的值就会存在一个地方
以上的操作都是针对String类型
如果删除里面的所有key值
for k in r.keys(): #循环获取到所有的key值,循环删除key值
r.delete(k)
print(r.type('zy')) #r.type查看key是什么类型的
6、哈希类型(hssh)哈希类型 嵌套字典
哈希类型前set添加为h,例如hset
r.hset('stu_info2','zhangsan','1m8 1000万存款') # stuinfo2 为 key值,其余为内容
print(r.hget('stu_info2','zhangsan').decode())#指定大key和小key获取对应的数据
print(r.hgetall('stu_info'))#获取里面所有的 k 和 v,h获取的结果为字典,结果为二进制
怎么把字典中二进制的内容转换成字符串
k= r.hgetall('stu_info')
new_k = {}
for k,v in k.items(): #items获取字典中的所有k和v值
new_k[k.decode()] = v.decode()
print(new_k)
r.delete('yy:zhangsan') #s删除整个key
r.hdel('stu_info','gyx')#删除指定的key
r.expire('zy',1000) # 设置失效时间,1000秒
import pymysql,json
#练习将数据库中的数据写到redis中
def export_excel(table_name):
r = redis.Redis(host='', password='', db=1, port=6379)
host = ''
user = ''
passwd = '123456'
db = ''
coon = pymysql.connect(host=host, user=user,passwd=passwd,port=3306, db=db, charset='utf8')
cur = coon.cursor(cursor=pymysql.cursors.DictCursor)
sql = 'select * from %s ;'%table_name
cur.execute(sql) # 执行sql
res = cur.fetchall() #获取所有结果
for i in res:
key = i.get('username')
vlu = json.dumps(i)
r.hset('stu_info_zch',key,vlu)
coon.close()
cur.close()
return res
nmae = export_excel('my_user')
7、TTL显示多长时间就是还有多少失效,如果TTL显示-1就是永久有效

8、常见问题:如果显示为空,修改redis中的View as为Plain Text


9、redis中创建key中

三、内置函数
fileds = ['id','name','sex','addr']
#enumerate 循环时直接可以获取到下标和值for index ,filed in enumerate((list1,list2):
for index ,filed in enumerate(fileds):
print(index,filed)
四、接口
安装 pip install flask flask 是web轻量级的开发框架
开发接口
1、mock接口,模拟一些接口,使用场景:如果在别的接口没有开发好的时候,就需要用他
2、 查看接口的返回值,之间的传值情况
3、查看部分数据
import flask,json
接口服务端的开发
__name__ 代表当前python文件
print(__name__)
server = flask.Flask(__name__)# 把当前的这个python文件,当做一个服务
methods=['get','post'] 支持get好post请求,如果不写默认支持get请求
1、接口练习一
@server.route('/index',methods=['get','post']) #装置器,添加这个后函数变为不是普通函数,是一个接口 ,index指的是接口路径是多少
def index():
res = {'msg':'这是我开发的第一个接口','msg_code':0} #状态码 msg_code ,返回0成功
return json.dumps(res,ensure_ascii=False) #修改为json串,如果返回{"msg": "\u8fd9\u662f\u6211\u5f00\u53d1\u7684\u7b2c\u4e00\u4e2a\u63a5\u53e3", "msg_code": 0}(有你扣的编码),使用ensure_ascii=False,默认显示True
server.run(port=7777,debug=True) #debug= True ,修改代码之后不用重启会自动帮忙重启
2、接口练习二
def my_db(sql):
import pymysql
coon = pymysql.connect( host='', user='', passwd='', port=3306, db='', charset='utf8')
cur = coon.cursor()#建立游标
cur.execute(sql) #执行sql
if sql.strip()[:6].upper()=='SELECT':
res = cur.fetchall()
else:
coon.commit()
res = 'OK'
cur.close()
coon.close()
return res
@server.route('/reg',methods=['post'])
def reg():
username =flask.request.values.get('username')
pwd =flask.request.values.get('passwd')
print(username,pwd)
if username and pwd:
sql = 'select * from my_user where username="%s";'%username
if my_db(sql):
res = {'msg':'用户已存在','msg_code':2001}
else:
insert_sql = 'insert into my_user (username,passwd,is_admin) values ("%s","%s",0);' % (username, pwd)
my_db(insert_sql)
res ={'msg':'注册成功','msg_code':0}
else:
res = {'msg':'必填字段未填,请查看接口文档','msg_code':1001}
return json.dumps(res,ensure_ascii=False)
# server.run(port=7777,debug=True)
server.run(port=7777,debug=True,host='0.0.0.0') #设置host=0.0.0.0,别人可以通过IP访问你ed接口
python 自动帮助加入到环境变量的操作方法

浙公网安备 33010602011771号