博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
操作redis数据库 & 操作Excel & 开发接口
阅读量:4703 次
发布时间:2019-06-10

本文共 14306 字,大约阅读时间需要 47 分钟。

操作redis数据库:

string类型 1. 增 set,传俩个参数 key  value(只要是字符串就行) 2. 删 delete 传一个参数  key 3. 修改 set 在目标key重新传参 key value 4. 查  get
import redisip = 'xxxxxx'password='xxxxxx'r = redis.Redis(host=ip,password=password,port=6379,db=10,                decode_responses=True)#连接redis,加入decode_responses=True后,传回的就不是betes类型了,而是字符串。r2 = redis.Redis(host=ip,password=password,port=6378,db=10, decode_responses=True)#连接redis
#增 set, key value
r.set('nhy_sessionn','sdfsdfssdf234sfdfsdsdfs',) r.set('nhy_info','{"name":"xxxx","password":"123456","account":11234}') #value只要是字符串就行
#查 res  = r.get('nhy_info') #返回key为nhy_info的值,是bytes类型print('bytes..',res)print('zifuchuan..',res.decode()) #decode()是bytes变字符串内置函数s.encode()  #字符串变成bytes
#删除r.delete('nhy_info') #删一个不存在的key,返回0
r.flushall() #清空所有数据库里面的数据r.flushdb() #只清空当前数据库里面的数据print(r.keys()) #获取到所有的keyprint(r.keys('*session*')) #模糊匹配含有session的关键词r.set('名称','小明',10)#添加10,即10秒后失效r.set('qml_session','sdfsdfsdfss')#r.expire('qml_session',30) #追加过期时间print(r.get('名称')) #查key的值
# 哈希类型
r.hset('sms_code','18612532945','121213') #增加值,俩层keyr.hset('sms_code','18612532941','121313') #增加值,俩层key,第一个参数跟上边那个一样print(r.hget('sms_code','18201034732')) #获取值,要输入俩层keyprint(r.hgetall('sms_code')) #返回一个字典k=vr.hdel('sms_code','18201034732') #删除指定的key值r.delete('sms_code') #把整个key删除掉print(r.type('sms_code'))  #返回hashprint(r.type('lyl_session007'))r.set('yulin:xxx','{"username":"yulin"}')#第一层key的值,json
牛刀小试——迁移redis 需求&思路: 1、把现在这个redis数据库里面的数据全部整到另外一个redis里面 #  a    有数据 #  b    空 要把a redis里面的数据 全部到迁移到b redis     # 1、连上2个redis     # 2、先从a redis里面获取到所有key     # 3、然后判断key是什么类型,根据类型来判断使用什么方法写入     # 4、从a redis里面获取到数据,set 到b redis里面
import redisip = '118.24.3.40'password='HK139bc&*'r = redis.Redis(host=ip,password=password,port=6379,db=3,                decode_responses=True)#连接redisr2 = redis.Redis(host=ip,password=password,port=6378,db=2,                decode_responses=True)#连接redisall_key = r.keys()  #从r拿到所有的keyfor k in all_key: if r.type(k) == 'string': #判断key的类型,选择对应的set方式 a_data = r.get(k)#从aredis获取到的数据  r2.set(k,a_data) elif r.type(k) =='hash': hash_data = r.hgetall(k) #返回字典 {'key1':'v1',key2:v2} for key,v in hash_data.items(): r2.hset(k,key,v)
tools.py文件:
import timeimport osdef timestampToStr(timestamp=None,format='%Y-%m-%d %H:%M:%S'):    #时间戳转格式化好的时间    if timestamp:        time1 = time.localtime(timestamp)        res = time.strftime(format, time1) else: res = time.strftime(format) return res #20180304153958 def strTotimestamp(str=None,format='%Y%m%d%H%M%S'): #格式化的时间转时间戳 if str: timep = time.strptime(str, format) res = time.mktime(timep) else: res = time.time() return int(res) def clean_log(path,day=3): print('调用了') for cur_path, dirs, files in os.walk(path): for file in files: if file.endswith('log'): f_time = file.split('.')[0].split('_')[-1] file_timestamp = strTotimestamp(f_time,'%Y-%m-%d') cur_timestamp = strTotimestamp(time.strftime('%Y-%m-%d'),'%Y-%m-%d') if (cur_timestamp - file_timestamp) >= 60*60*24*day:#判断文件的时间是否大于3天  os.remove(os.path.join(cur_path,file)) import pymysql def my_db(sql): conn = pymysql.connect(host='xxxxxx',user='xxxxxx',password='xxxxxx', db='jxz',port=3306,charset='utf8',autocommit=True) cur = conn.cursor(pymysql.cursors.DictCursor) cur.execute(sql) res = cur.fetchone() #{'username':'nhy'} {}  cur.close() conn.close() return res import hashlib def my_md5(s,salt=''): s = s+salt news = str(s).encode() m = hashlib.md5(news) return m.hexdigest() if __name__ == '__main__': #判断如果是在别的文件里面导入这个python文件的话,就不执行下面的代码 print(strTotimestamp()) print(clean_log('.')) print(clean_log('.',2))

模块导入顺序:

导入自己写的tools.py模块,标红没关系,其实没有错,是pyharm没那么智能,识别不到而已。可以手动加入到环境变量中,就不标红了 手动加入:
手动加入到环境变量:右击目标文件—mark directory as—source root,然后就可以直接用子目录下的模块,不需再‘文件名.然后函数名’使用 手动加入到环境变量后,文件会变蓝。而且也不变红了。下次打开pycharm还能使用。
import 导入一个模块的实质就是把这个python文件从头到尾执行一次。
# 1. 直接导入文件名儿,里边的函数要用 ‘文件名.函数()’import myprint(dir(my))print(my.sayName())# 2. 从文件名儿里边导入函数,可以直接用函数from my import sayNameprint(sayName())
import 查找顺序: 1. 当前目录 2. sys.path(python安装的目录) 如果当前目录和其他目录有一个一样的文件名,出来是当前目录的
import sysprint(sys.path)sys.path.append(r'/Users/nhy/PycharmProjects/tcz/day6')sys.path.insert(0,r'/Users/nhy/PycharmProjects/tcz/day6')print(sys.path)

 

修改Excel

import xlrd #引入表格读模块from xlutils import copy#1、先打开原来的excel#2、复制一份#3、在复制的excel上修改#4、保存book = xlrd.open_workbook('stu3.xls') #打开表格new_book = copy.copy(book) #复制一份sheet = new_book.get_sheet(0) #修改excel的时候,得用get_sheet()找到sheet, 不再是sheet_by_index(0)sheet.write(0,0,'id') sheet.write(0,3,'password') new_book.save('stu3.xls')

 

写excel

import xlwt #引入表格写模块book = xlwt.Workbook() #新建一个excelsheet = book.add_sheet('sheet1') #添加一个sheet页#这种方法效率不高sheet.write(0,0,'编号') #在A1写上‘编号’sheet.write(0,1,'名字') #在B1写上‘名字’sheet.write(0,2,'性别')sheet.write(1,0,'1')sheet.write(1,1,'马春波')sheet.write(1,2,'男')#把二维数组里的内容写到表格中:stu_info  = [ ['编号','姓名','密码','性别','地址'], [1,'machunbo','sdfsd23sdfsdf2','男','北京'], [2,'machunbo2','sdfsd23sdfsdf2','男','北京'], [3,'machunb3','sdfsd23sdfsdf2','男','北京'], [4,'machunbo4','sdfsd23sdfsdf2','男','北京'], [5,'machunbo5','sdfsd23sdfsdf2','男','北京'], [6,'machunbo6','sdfsd23sdfsdf2','男','北京'], [7,'machunbo6','sdfsd23sdfsdf2','男','北京'], [8,'machunbo6','sdfsd23sdfsdf2','男','北京'], [9,'machunbo6','sdfsd23sdfsdf2','男','北京'], [10,'machunbo6','sdfsd23sdfsdf2','男','北京'], [11,'machunbo6','sdfsd23sdfsdf2','男','北京'], ] #11行5列,下边这样写效率还很慢: row = 0 #第一行 for stu in stu_info: sheet.write(row,0,stu[0]) sheet.write(row,1,stu[1]) sheet.write(row,2,stu[2]) sheet.write(row,3,stu[3]) sheet.write(row,4,stu[4]) ... row+=1 #这样写稍微快一点: row = 0 #行 for stu in stu_info: #stu col = 0 # 列 # [1, 'machunbo', 'sdfsd23sdfsdf2', '男', '北京'], for s in stu: #控制列 sheet.write(row,col,s) #0 3 男 col+=1 row+=1 #这样写效率最高:引用enumerate内置函数 for index,value in enumerate(stu_info): #同时取下标和值 for index2,v2 in enumerate(value): print(index,index2,v2) sheet.write(index,index2,v2) book.save('stu3.xls') #wps xls xlsx ,微软的office 用 xls

接口开发

注意:添加debug=True,修改代码后会自动运行,不能再点击运行了,只能刷新 可以用自己电脑的IP登录,自己电脑还能用返回的127.0.0.1 登录。要想别人登录,改为host='0.0.0.0'
import flask #引入接口模块,flask烧瓶的意思import tools #自己写的脚本tools里面有my_db和my_md5函数import jsonserver = flask.Flask(__name__)#新建一个服务,把当前这个python文件当做一个服务@server.route('/login',methods=['get']) #接口路径,请求方式def hello(): #登录函数    uname = flask.request.values.get('username')#要求传参    pd = flask.request.values.get('passwd')    sql = 'select * from app_myuser where username="%s"'%uname #从数据库选择用户名为uname的数据    res = tools.my_db(sql)    if res: #如果存在uname这个用户,即返回了值        if tools.my_md5(pd) == res.get('passwd'): #fetchone取回一个数据{‘username’:'nhy','passwd':'123456'}。字典的get方法查值,不会报错,key不存在是返None            res = {"code":0,"msg":"登录成功!"}        else: res = {"code":1,"msg":"密码错误!"} else: res = {'code':2,"msg":"用户不存在"} return json.dumps(res,ensure_ascii=False,indent=4) #把字典变成json,方便储存,再拿出来用方便。而且必须有返回值  @server.route('/reg',methods=['post']) #登录代码 def reg(): uname = flask.request.values.get('username') pd = flask.request.values.get('passwd') cpd = flask.request.values.get('cpwd') server.run(host='0.0.0.0',port=8999,debug=True) #运行这个服务 #ip:8000/login #127.0.0.1

读取excel

import xlrd #引入表格读模块book = xlrd.open_workbook('stu3.xls') #打开表格sheet = book.sheet_by_index(0) #通过索引找到第一个表sheet = book.sheet_by_name('sheet1') #通过名称找到第一个表print(sheet.cell(0,0).value) #获取表中指定单元格A1的内容print(sheet.cell(1,0).value)#获取表中指定单元格B1的内容print(sheet.row_values(0)) #获取整行的数据print(sheet.row_values(1))print(sheet.col_values(0))#获取整列的数据print(sheet.col_values(1))print(sheet.nrows) #行数 number of rowsprint(sheet.ncols) #列数for row in range(1,sheet.nrows):     print(sheet.row_values(row)) #取每行的值

上周回顾:

1、内置函数         len         type         max()         sum()         round(5.3212,2)         char() #         ord() #         sorted()         reversed()         res = list(filter(func,[1,2,3,4,5]))         res = list(map(func,[1,2,3,4,5]))         id()         eval('1+1')         '''         import os         os.system('xxx')         '''         exec('')     2、函数的一点补充         递归:函数自己调用自己。     3、匿名函数         lambda s:str(s).isdigit()         def func(s):             return str(s).isdigit()     4、第三方模块安装         pip install xxx         easy_install xxx 需要安装setuptools模块         1、python操作xxx的模块         .whl             pip install   pymysql.whl         .tar.gz             解压                 python3 setup.py install         下面是电脑上装了多个版本的python         那你要去python的安装目录下,分别把python.exe         改个名字,能区分出来是python2还是python3             python2  -m pip install xxx             python3 -m pip install xxx     5、hashlib模块         import hashlib         s = 'xxxxx'         s = s.encode()         m = hashlib.md5(s)         res = m.hexdigest()     6、mysql数据库操作         import pymysql         conn = pymysql.connect(host,user,db,password,port,charset,         autocommit=True)         cur = conn.cursor(pymysql.cursors.DictCursor)         cur.execute(sql)         'select * from user;'         cur.fetchall() # ((1,name,password),(2,name,passwd2))         cur.fetchone() # (1,name,passwrd) {'id':1,"name":name,         "password":123234}         cur.close()         conn.close()    os.walk(r'e:\\') #递归循环一个目录 这周内容:  1、模块相关的,导入模块流程、导入的模块的实质         1、import xx             import 一个模块的实质就是把这个python文件从头到尾执行一遍         2、import模块的查找模块的顺序             1、从当前目录下找             2、sys.path             从上面2个目录都找不到,那就报错     2、redis 操作、excel         redis         1.关系型数据库             mysql、oracle、sql server             database                 table1 user                 table2 account                 table3  order            niuhanyang            user_id            sql语句来操作数据            数据是存在磁盘上的         2.非关系型数据库、NOSQL             1、数据是存在内存里面             2、不需要通过sql语句来查询数据             MongoDB                 数据也是存在磁盘上的             redis             memcache             key = vaule     ip:8000/pay?xxx=xxx     3、接口开发         1、mock 服务         2、给别人提供数据         3、         flask  web框架
上周作业
# 作业1     #、 写一个函数,传入一个路径和一个关键字(关键字是文件内容),找到文件内容里面有这个关键字的txt文件     # 1、去找到这个目录下面的所有.txt文件     # 2、循环打开所有的txt文件,读到文件内容     # 3、判断关键字是否存在文件里面 import os def find_content(path,key_word):     for cur_path,dirs,files in os.walk(path):         for file in files:             if file.endswith('log'):                 print(file)                 abs_file_path = os.path.join(cur_path,file)                 res = open(abs_file_path,encoding='utf-8').read()                 if key_word in res:                     print('文件内容在',abs_file_path) #2、删除3天前的日志文件     #1、要获取到所有的日志文件 os.walk()     #2、先获取到文件的时间     #3、要判断文件的日期是否在三天前    当天的日期的时间戳    - 60*60*24*3 import time def timestampToStr(timestamp=None,format='%Y-%m-%d %H:%M:%S'):     #时间戳转格式化好的时间     if timestamp:         time1 = time.localtime(timestamp)         res = time.strftime(format, time1)     else:         res = time.strftime(format)     return res #20180304153958 def strTotimestamp(str=None,format='%Y%m%d%H%M%S'):     #格式化的时间转时间戳     if str:         timep = time.strptime(str, format)         res = time.mktime(timep)     else:         res = time.time()     return int(res) def clean_log(path,day=3):     for cur_path, dirs, files in os.walk(path):         for file in files:             if file.endswith('log'):                 f_time = file.split('.')[0].split('_')[-1]                 file_timestamp = strTotimestamp(f_time,'%Y-%m-%d')                 cur_timestamp = strTotimestamp(time.strftime('%Y-%m-%d'),'%Y-%m-%d')                 if (cur_timestamp - file_timestamp) >= 60*60*24*day:#判断文件的时间是否大于3天                     os.remove(os.path.join(cur_path,file)) #clean_log(r'/Users/nhy/PycharmProjects/tcz/day6') #find_content(r'/Users/nhy/PycharmProjects/tcz','函数') # print(os.listdir('/Users/nhy')) #登录、注册 import pymysql def my_db(sql):     conn = pymysql.connect(host='xxxxxx',user='xxxxxx',password='xxxxxx',                     db='jxz',port=3306,charset='utf8',autocommit=True)     cur = conn.cursor(pymysql.cursors.DictCursor)     cur.execute(sql)     res = cur.fetchone() #{'username':'nhy'}  {}     cur.close()     conn.close()     return res import hashlib def my_md5(s,salt=''):     s = s+salt     news = str(s).encode()     m = hashlib.md5(news)     return m.hexdigest() def reg():     for i in range(3):         user =input('username:').strip().upper()         pd = input('password:').strip()         cpd = input('cpwd:').strip()         sql='select username from app_myuser where username = "%s";'%user         if len(user) not in range(6,11) or len(pd) not in range(6,11): # 6 7 8 9 10             print('账号/密码长度错误,6-10位之间')         elif pd != cpd:             print('两次输入密码不一致')         elif my_db(sql):             print('用户已存在')         else:             md5_passwd = my_md5(pd)             insert_sql= 'insert into app_myuser (username,passwd,is_admin) value ("%s","%s",1);'%(                 user,md5_passwd             )             my_db(insert_sql)             print('注册成功!')             break     else:         print('失败次数过多!') def login():     for i in range(3):         username = input('请输入用户名:').strip().upper()         password = input('请输入密码:').strip()         sql='select username,passwd from app_myuser where username = "%s";'%username         if username =='' or password =='':             print('账号/密码不能为空')         else:             res = my_db(sql) # {'username':nhy  'passwd':'xxxxx'}             if res:                 if my_md5(password) == res.get('passwd'):                     print('登陆成功!')                     break                 else:                     print('密码错误!')             else:                 print('用户不存在')     else:         print('错误次数过多!') # login()
本周作业: 1、写一个函数,实现,传入一个表名,把这个表里面的所有数据导出到excel里面     def data_to_excel(table_name):         pass         book.save(table_name.xls) 2、写一个函数,把app_myuser 这个表里面的数据全放到redis里面     key的样式 :qml:wangcan1     redis key的类型用 string、hash都型         下面是存到redis里面的数据格式             wangcan1    {"id":1,"username":"wangcan1","password":"8b634156edde77e407764d5166e34d20","is_admin":1}             wangcan2    {"id":1,"username":"wangcan1","password":"8b634156edde77e407764d5166e34d20","is_admin":1}             wangcan3    {"id":2,"username":"wangcan1","password":"8b634156edde77e407764d5166e34d20","is_admin":1} 3、改造登录接口,用户数据从redis里面取 4、注册接口,注册完之后,用户信息写到redis里面,要判断用户是否存在,密码存密文     yulin:yulin  {"id":1,"username":"wangcan1","password":"8b634156edde77e407764d5166e34d20","is_admin":1}

转载于:https://www.cnblogs.com/fangfangzhang/p/10162580.html

你可能感兴趣的文章
[转]大型网站系统架构的演化
查看>>
非常好的JSUI
查看>>
基于EasyNVR摄像机无插件直播流媒体服务器实现类似于单点登录功能的免登录直播功能...
查看>>
python学习0day
查看>>
课堂练习之检测水军
查看>>
函数指针的使用
查看>>
位图数据结构的操作
查看>>
azkaban用户管理及权限配置
查看>>
GCD学习笔记
查看>>
PHP......会话控制SESSION与COOKIE
查看>>
[转]AchartEngineActivity引擎绘制柱状图、曲线图
查看>>
[转]javascript实现限制上传文件的大小
查看>>
我的Java设计模式-策略模式
查看>>
C# 报表接口样例,简单实用
查看>>
C++常见内存错误及解决方案
查看>>
控制台应用程序窗口无法输入汉字解决办法
查看>>
Java中实现String.padLeft和String.padRight
查看>>
winCVS 使用的一个小要点
查看>>
一个关于session的问题
查看>>
加快开发时间的8个CSS的预处理程序
查看>>