补充数据库方法:
import pymysql def mysql(sql): conn = pymysql.connect( host='118.24.3.40', user='jxz', passwd='123456', port=3306, db='jxz', charset='utf8' ) # cur = conn.cursor() #建立游标 cur=conn.cursor(cursor=pymysql.cursors.DictCursor) #指定cur类型,返回字典 cur.execute(sql) if sql.strip()[:6].upper()=='SELECT': # print(cur.description) #获取表头信息 res='' # res = cur.fetchall() #得到所有结果 # res=cur.fetchone() #得到一条结果 # res2 = cur.fetchone() # res3 = cur.fetchone() # fileds=[] # for filed in cur.description: # fileds.append(filed[0]) fileds=[filed[0] for filed in cur.description] #列表生成式 和上面三行作用相同, 获取表头中的列名 print(fileds) else: conn.commit() res=1 cur.close() # 关闭游标 conn.close() # 关闭连接 return res sql = 'select * from stu;' #写sql语句时需要使用占位符,不能直接在sql语句里面写变量名 res=mysql(sql) print(res)
一.写excel:
import xlwt book = xlwt.Workbook() #新建一个excel sheet = book.add_sheet('sheet1') #加sheet页 sheet.write(0,0,'姓名') #行、列、写入的内容 sheet.write(0,1,'年龄') sheet.write(0,2,'性别') book.save('stu.xls') #必须以.xls结尾
二.通用从数据库取数据导出到excel:
import pymysql,xlwt def export_excel(table_name): host, user, passwd, db = '118.24.3.40', 'jxz', '123456', 'jxz' coon = pymysql.connect(user=user, host=host, port=3306, passwd=passwd, db=db, charset='utf8') cur = coon.cursor() # 建立游标,指定cursor类型返回的是字典 sql = 'select * from %s ;'%table_name cur.execute(sql) # 执行sql fileds = [filed[0] for filed in cur.description] #所有的字段 all_data = cur.fetchall() book = xlwt.Workbook() sheet = book.add_sheet('sheet1') for col,filed in enumerate(fileds): #写表头的 enumerate 分别取出每个元素的位置和value 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')
三.读excel:
import xlrd book = xlrd.open_workbook('app_student.xls') sheet = book.sheet_by_index(0) #获取到第几个sheet页 sheet2 = book.sheet_by_name('shee1') #根据名字获取到sheet页 print(sheet.cell(0,0)) #指定sheet页里面行和列获取数据 ,会包含type print(sheet.cell(0,0).value) #指定sheet页里面行和lie获取数据,只有数据,没有type print(sheet.cell(1,0).value) #指定sheet页里面行和lie获取数据 print(sheet.row_values(0)) #这个获取到第几行的内容 print(sheet.row_values(1)) #这个获取到第几行的内容 print(sheet.nrows) #获取到excel里面总共有多少行 for i in range(sheet.nrows): #循环获取到每行数据 print(sheet.row_values(i)) print(sheet.ncols) #总共多少列 print(sheet.col_values(0)) #取第几列的数据
四.修改excel:
import xlrd from xlutils import copy book = xlrd.open_workbook('stu.xls') #先用xlrd模块,打开一个excel new_book = copy.copy(book) #通过xlutils这个模块里面copy方法,复制一份excel sheet = new_book.get_sheet(0) #获取sheet页 lis = ['编号','名字','性别','年龄','地址','班级','手机号','金币'] for col,filed in enumerate(lis): sheet.write(0,col,filed) new_book.save('app_student.xls')
五.redis操作:
import redis r = redis.Redis(host='118.24.3.40',password='HK139bc&*',db=6,port=6379) #增删改查 r.set('niuhanyang','帅!') #数据库里面新增一个值 # 修改也是set r.delete('niuhanyang') r.setex('python_123','哈哈哈',20) #设置key的失效时间,最后这个参数是秒 hwt = r.get('hwt') print(hwt.decode()) print(r.keys('*xxx*'))#获取到所有的key print(r.get('sdfsdf')) r.set('天蝎座:mpp','呵呵呵') r.get('天蝎座:mpp') # 上面操作都是针对 string类型 for k in r.keys(): #删除所有的key r.delete(k) # 哈希类型 hash 嵌套字典 r.hset('stu_info','刘伟','1m8 100w存款') r.hset('stu_info','张流量','浪,为了不交作业,故意让狗咬他') r.hset('stu_info','董春光','为了不交作业,找了一条狗咬张流量,然后陪张流量去医院') print(r.hget('stu_info','张流量').decode()) #指定大key和小key获取对应的数据 print(r.hgetall('stu_info')) #获取里面所有的k和-v stu_info = r.hgetall('stu_info') r.hdel('stu_info','gyx') #删除指定key r.delete('stu_info') #删除整个key r.expire('aaa',100) #第一个key设置失效时间 new_stu_info = {} for k,v in stu_info.items(): new_stu_info[k.decode()] = v.decode() print(new_stu_info) print(r.type('stu_info')) #查看key是什么类型的 print(r.type('zll')) s='呵呵' s.encode() #把字符串转成二进制 hwt = b'sdfsdfsdf' hwt.decode() #把bytes类型转成字符串 #pymysql、json、redis #1、连数据库,查到数据库里面所有的数据,游标类型要用pymysql.curosrs.DictCour #2、查到所有数据 [ {"id":1,"passwd":"49487dd4f94008a6110275e48ad09448","username":"niuhayang","is_admin":1}] #3、循环这个list,取到usernamer,把username当做key #4、再把这个小字典转成json,存进去就ok。 import pymysql,json,redis r = redis.Redis(host='118.24.3.40',password='HK139bc&*',db=1,port=6379) conn = pymysql.connect(host='118.24.3.40',user='jxz',passwd='123456',db='jxz',charset='utf8') cur = conn.cursor(cursor=pymysql.cursors.DictCursor) cur.execute('select * from my_user;') all_data = cur.fetchall() for data in all_data: k = data.get('username') r.hset('stu_info_nhy',k,json.dumps(data)) cur.close() conn.close()
六.接口开发:
import flask,json import pymysql # __name__,代表当前这个python文件 server=flask.Flask(__name__) #把当前这个python文件,当做一个服务 def mysql(sql): conn = pymysql.connect( host='118.24.3.40', user='jxz', passwd='123456', port=3306, db='jxz', charset='utf8' ) # cur = conn.cursor() #建立游标 cur=conn.cursor(cursor=pymysql.cursors.DictCursor) #指定cur类型,返回字典 cur.execute(sql) if sql.strip()[:6].upper()=='SELECT': res = cur.fetchall() #得到所有结果 else: conn.commit() res=1 cur.close() # 关闭游标 conn.close() # 关闭连接 return res #ip:8000/index?uge @server.route('/index',methods=['get']) #@server.route 装置器 生成一个接口, methods=['get','post'] 可以写多个,支持多个请求,如果不写,默认是get请求,接口返回的都是json格式 def index(): res={'msg':'这是我开发的第一个接口','msg_code':0} return json.dumps(res,ensure_ascii=False) #返回json串,ensure_ascii=False添加后,可以显示为中文 dumps和dump区别,dump是操作文件的, server.run(port=7777,debug=True) #启动接口服务 debug=True,改了代码之后,不用重启就会生效,[如果直接运行,会再打开一个服务,所以注意一定要stop掉一个之后再运行脚本] @server.route('/reg',methods=['post']) def reg(): username=flask.request.values.get('username') #flask.request 所有用户输入过来的信息, values.get获取信息 pwd=flask.request.values.get('passwd') if username and pwd: sql='select *from my_user where username="%s";' %username if mysql(sql): res={'msg':'用户名已存在','msg_code':2001} else: insert_sql='insert into my_user (username,passwd,is_admin) values ("%s","%s",0);' %(username,pwd) mysql(insert_sql) res={'msg':'注册成功','msg_code':0} else: res={'msg':'必填字段未填','msg_code':1001} return json.dumps(res,ensure_ascii=False) server.run(port=7778,debug=True,host='0.0.0.0') #指定了host,其他人也可以通过ip地址访问了,改动需要重启
七.自己开发一个api:
。。。
笔记:
os.walk() #列出路径下所有文件
os.listdir() #只能列出路径下的一层文件和文件夹
os.system('ifconfig') #只执行命令
os.popen() # 执行命令,并获取到结果
os.popen('ifconfig').read() #得到执行结果
md5
hashlib
md=hashlib.md5() #实例化
md.update(s.encode())
md.hexdigest() #得到加密结果
pymysql,pyoracle
conn=pymysql.connect(host,pwd,port,db,charset='utf8')
cur=conn.cur()
cur.execute(sql)
conn.commit()
cur.fectall() #取结果
cur.close()
conn.close()
excel xlwt
xls=xlwt.Workbook()
sheet=xls.add_sheet('sheet')
sheet.write(0,0,'id')
xls.save('stu.xls')
今天:
1.补充操作数据库
fetchall() #获取到这个sql的全部执行结果
fetchone() #获取到这个sql的一条结果
如果sql语句的执行结果是多条数据的时候,就用fetchall
如果你能确定sql执行的结果只有一条,就用fetchone
还有一个fetchmany() #传入一个数,返回多少条数据
cur=conn.cursor(cursor=pymysql.cursors.DictCursor) #指定游标类型,返回字典类型
enumerate([list,list2]) #循环的时候,直接取到下标
2、操作redis
redis也是一个数据库。
关系型数据库
mysql、oracle、sql server、db2、sqlite
sql
数据存在磁盘上
非关系型数据库
没有
sql
get('k')
set('xx')
mongodb、redis
redis数据全部都是存在内存里面。速度快,但是,重启就不见了,要实现redis数据持久化,重启前把数据保存到磁盘上,重启后再恢复
redis本身性能是非常好的,每秒支持30w次的读写。
牛牛的redis:118.24.3.40
6379
HK139bc&*
3.开发接口
1.mock接口,在需要其他接口返回数据时,接口还没有开发好,可以先写一个mock模拟接口来返回值用于当前接口测试
flask是一个轻量级的接口开发框架
4.异常处理
作业:
1、修改excel,把app_student.xls里面的数据,
1、如果这一行数据里面有乱码,那么就给他删掉
2、再加上一列,是否毕业
3、如果班级是天蝎座的话,毕业这一列写成毕业
4、其他班级的写成未毕业
2、
1、改写注册接口的:
1、改写我的注册接口,让它的密码存成密文的。
2、数据不再存在mysql里面,存到redis里面,redis的key就用string类型
3、niuhanyang 7869d295e566295b51eec5d6bed67c14
4、校验用户是否存在
user:niuhanyang
2、参照接口文档上
http://doc.nnzhp.cn/index.php?s=/6&page_id=12 登录接口
登录成功之后,返回seesionid,用户登录时间
sessionid
用户名+当前的时间戳 md5,seesion失效时间是60分钟
sessionid:niuhanyang
{"seessionid":a5dfcb047721e02a6f8bff779c815165,"login_time":201805051820}
如果这个用户已经登录过了,那么就返回他的seesionid,登录时间
给多个变量赋值:
host,user,passwd,db='192.22.2.2','jxm','234567','dvd'