zoukankan      html  css  js  c++  java
  • 学习笔记七 模块导入,redis和Excel操作,基本接口开发

    一.模块导入

    import 模块名

    一个模块的实质就是把这个python文件从头到尾执行一遍

    import模块的查找模块的顺序
    1、从py执行程序的当前目录下找
    2、从sys.path里查找
    从上面2个目录都找不到,那就报错。

    三种方法添加当前模块至程序可识别范围:

    1、将模块文件手动拷贝到py执行程序的当前目录中

    2、在执行文件中将模块的路径depend加入到sys.path

    3、pycharm中将模块标记执行Sources Root操作

    二.Redis操作

    redis是一种非关系型数据库,是以键值对的形式存放数据,数据是存放在内存中。redis的key有两种数据类型,一是string类型,一是hash类型,他们的操作方式不相同。

    1、redis的连接:

    redis.Redis(host=ip,password=password,port=6379,db=10,decode_responses=True)

    #连接redis,db代表数据库名字,decode_responses=True指定后,数据返回的不是以byte形式,会进行编码

    2、redis新增数据

    string类型的新增:

    #在Redis中设置值,默认不存在则创建,存在则修改
    r.set('name', 'zhangsan')
    '''参数:
         set(name, value, ex=None, px=None, nx=False, xx=False)
         ex,过期时间(秒)
         px,过期时间(毫秒)
         nx,如果设置为True,则只有name不存在时,当前set操作才执行,同setnx(name, value)
         xx,如果设置为True,则只有name存在时,当前set操作才执行'''

    redis的value也可以接dict形式:

    r.set('sessionn','sdfsdfssdf234sfdfsdsdfs',20)#过期时间20秒
    r.set('info','{"name":"xxxx","password":"123456","account":11234}',20)#过期时间20秒

    如果不在set的时候指定过期时间,可以用expire函数指定过期时间,需要指明对应的key

    r.set('session','sdfsdfsdfss')
    r.expire('session',20) #指定过期时间

    hash类型的新增:

    hash类型可以理解为嵌套的dict类型,string类型可以理解为非嵌套的dict类型

    r.hset('sms_code','18612532945','121213') #set值

    因为hash是嵌套的dict,所以第一个参数是key的值,第二个参数是value里小key的值,在hset里不可以指定过期时间,只能用expire函数指定过期时间。

    3、redis新增数据删除

    string类型删除:

    r.delete('nhy_info') #删一个不存在的key,也不会报错
    r.flushall() #清空所有数据库里面的数据
    r.flushdb() #只清空当前数据库里面的数据

    hash类型删除:

    r.hdel('sms_code','18201034732') #删除指定的key
    r.delete('sms_code') #把整个key删除掉

    4、redis数据查询:

    sting类型的value查询:

    res  = r.get('nhy_info') 

    hash类型的value查询:

    r.hget('sms_code','18201034732') #获取值
    r.hgetall('sms_code') #获取到这个key里面所有的内容

    key的查询:

    r.keys() #获取到所有的key
    r.keys('*session*') #模糊匹配

    5、redis的修改:同新增操作(默认不存在则创建,存在则修改)

    6、对于redis的key属于string还是hash类型,可以用type判断:

    r.type('sms_code'))
    r.type('lyl_session007')

    7、redis代码小示例:

    #1、把现在这个redis数据库里面的数据全部整到另外一个redis里面
    #  a     有数据
    #  b    空
    #要把a redis里面的数据 全部到迁移到b redis
        # 1、连上2个redis
        # 2、先从a redis里面获取到所有key
        # 3、然后判断key是什么类型,根据类型来判断使用什么方法
        # 4、从aredis里面获取到数据,set 到b redis里面
    import redis
    ip = '192.168.1.130'
    password='123456'
    r = redis.Redis(host=ip,password=password,port=6379,db=3,decode_responses=True)#连接redis
    r2 = redis.Redis(host=ip,password=password,port=6378,db=2,decode_responses=True)#连接redis
    all_key = r.keys()
    for k in all_key:
        if r.type(k) == 'string':
            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)

    三.excel操作

    1、excel读取:

     1 import xlrd
     2 book = xlrd.open_workbook('stu3.xls')#打开一个xls文件
     3 sheet = book.sheet_by_index(0)#根据sheet页的标号指定打开一个sheet页
     4 sheet1 = book.sheet_by_name('sheet1')#根据指定的sheet名打开一个sheet页
     5 print(sheet.cell(0,0).value)#获取指定单元格的内容
     6 print(sheet.cell(1,0).value)
     7 print(sheet.row_values(0)) #获取整行的数据
     8 print(sheet.row_values(1))
     9 print(sheet.col_values(0))#获取整列的数据
    10 print(sheet.col_values(1))
    11 
    12 print(sheet.nrows) #行数
    13 print(sheet.ncols) #列数
    14 for row in range(1,sheet.nrows):
    15     print(sheet.row_values(row))

    2、excel写入:

     1 #以下是要写入表格的数据
     2 stu_info  = [
     3     ['编号','姓名','密码','性别','地址'],
     4     [1,'machunbo','sdfsd23sdfsdf2','','北京'],
     5     [2,'machunbo2','sdfsd23sdfsdf2','','北京'],
     6     [3,'machunb3','sdfsd23sdfsdf2','','北京'],
     7     [4,'machunbo4','sdfsd23sdfsdf2','','北京'],
     8     [5,'machunbo5','sdfsd23sdfsdf2','','北京'],
     9     [6,'machunbo6','sdfsd23sdfsdf2','','北京'],
    10     [7,'machunbo6','sdfsd23sdfsdf2','','北京'],
    11     [8,'machunbo6','sdfsd23sdfsdf2','','北京'],
    12     [9,'machunbo6','sdfsd23sdfsdf2','','北京'],
    13     [10,'machunbo6','sdfsd23sdfsdf2','','北京'],
    14     [11,'machunbo6','sdfsd23sdfsdf2','','北京'],
    15 ]
    16 
    17 import xlwt
    18 book = xlwt.Workbook() #新建一个excel
    19 sheet = book.add_sheet('sheet1') #添加一个sheet页
    20 
    21 
    22 for index,value in enumerate(stu_info):
    23     #  index 0
    24     # value ['编号','姓名','密码','性别','地址']
    25 
    26     #index 1
    27     #value [1,'machunbo','sdfsd23sdfsdf2','男','北京']
    28     for index2,v2 in enumerate(value):
    29         print(index,index2,v2)
    30         #0 1
    31         #1 machunbo
    32         #2 sdfsd23sdfsdf2
    33         #4 北京
    34         sheet.write(index,index2,v2)
    35 
    36 book.save('stu3.xls')  #wps可以写入 xls xlsx  ,微软的office只能写入  xls

    3、excel修改:

    excel不能直接在原文件上修改,只能通过copy一份新的,在新的文件中写入修改的地方,最后再save进行保存完成。

     1 import xlrd
     2 from xlutils import copy
     3 
     4 #1、先打开原来的excel
     5 #2、复制一份
     6 #3、在复制的excel上修改
     7 #4、保存
     8 
     9 book = xlrd.open_workbook('stu3.xls')
    10 new_book = copy.copy(book) #
    11 sheet = new_book.get_sheet(0) #修改excel的时候,得用get_sheet(),并且参数只能是sheet的index,不能通过name的形式
    12 sheet.write(0,0,'id')
    13 sheet.write(0,3,'password')
    14 new_book.save('stu3.xls')

    四.接口开发

    1、定义服务:定义接口之前必须定义服务

    import flask
    server = flask.Flask(__name__)
    #新建一个服务,把当前这个python文件当做一个服务

    2、定义接口:

     1 @server.route('/login',methods=['get','post'])#装饰器,修饰下面的函数为一个接口
     2 def hello():
     3     uname = flask.request.values.get('username')#从web请求中获取输入的参数信息
     4     pd = flask.request.values.get('passwd')
     5     sql = 'select * from app_myuser where username="%s"'%uname
     6     res = tools.my_db(sql)
     7     if res:
     8         if tools.my_md5(pd) == res.get('passwd'):
     9             res = {"code":0,"msg":"登录成功!"}
    10         else:
    11             res = {"code":1,"msg":"密码错误!"}
    12     else:
    13         res = {'code':2,"msg":"用户不存在"}
    14     return json.dumps(res,ensure_ascii=False,indent=4)
    15 
    16 @server.route('/reg',methods=['post'])
    17 def reg():
    18     uname = flask.request.values.get('username')
    19     pd = flask.request.values.get('passwd')
    20     cpd = flask.request.values.get('cpwd')

    methods说明改接口是支持get还是post,可以都支持。

    3、接口启动:

    server.run(host='0.0.0.0',port=8999,debug=True)

    写在文件最后,debug=true,代表调试模式,在文件修改之后可以自动生效,无需重启服务。host='0.0.0.0'表示可以接受来自任意ip的访问,如果写成127.0.0.1则表示只接受来自本机的访问。

  • 相关阅读:
    在 Windows 10 中创建任何大小的虚拟测试文件的 2 种方法
    最近的github又不稳了。。ip host 大法来
    windows mklink /d /h /j 精讲
    kafka-manager配置和使用
    Java——七种垃圾收集器+JDK11最新ZGC
    聚簇索引和非聚簇索引(通俗易懂 言简意赅)
    【转载】Java中的锁机制 synchronized & 偏向锁 & 轻量级锁 & 重量级锁 & 各自优缺点及场景 & AtomicReference
    都1202年了奉劝那些还在用centos6的gs,赶紧切ubuntu-Centos6 升级 gcc 惨痛教训
    Tamper Chrome – 请求修改扩展,可用于Web安全测试
    线程、线程池三大方法、七大参数、四种策略
  • 原文地址:https://www.cnblogs.com/eichar/p/10209587.html
Copyright © 2011-2022 走看看