• Python基础-修改excel、redis、接口开发、组织代码


    pymysql模块补充内容

    1、 游标.description():显示表的字段属性

    (什么是游标:游标用于交互式应用,就好比word里的光标一样,要修改某个地方,要先把光标移动到这里)

    用好这个方法,可以获取到表中所有字段名

    2、 游标.fetchone():只获取一行,游标自动移至下一行

    3、 游标.fetchmany(n): 获取n行,游标自动下移

    注意:除了select以外的sql,在execute之后,还要加上一句  连接.commit()

    cur.execute("insert/delete/update......")

    conn.commit()

    xlrd模块

    xlrd用来读excel,只能是xls格式,xlsx不能用这些模块

    1、 打开工作簿: open_workbook()

    2、 打开工作表: 工作簿. sheet_by_index(0)

    3、 读取数据

    工作表.cell(行号,列号).value获取单元格内容,注意行列都是从0开始计数

    工作表.row_values(行号): 获取一行内容

     

    工作表.nrows: 获取总行数

     

    显示所有行内容:

     

    工作表.col_values(列号): 获取一列内容

     

    工作表.ncols: 获取总列数

     

    显示所有列内容:

    xlutils模块

    用于修改excel文档,要注意不能直接对excel文档修改,要先将excel文档用xlrd打开,然后复制一份副本,对副本进行修改,最后保存覆盖原excel文档

    注意:xlutils的导入很特殊,不能用import xlutils,必须用from xlutils import copy

    1、 复制工作簿:copy.copy(工作簿) 首先要先用xlrd打开一个工作簿,然后才能复制

    2、 打开工作表:工作簿.get_sheet(0)

    3、 修改内容:工作表.write(行号,列号,内容)

     

    redis模块

    redis是一种非关系型数据库,不是二维表结构,不用sql,是键值结构,直接用get、set、操作数据库,注意:键不能重复,不能按照值来查询

    1、 连接redis: redis.Redis(host,port,password,db) ,注意Redis大写

    2、 执行操作:

    redis数据类型有很多种,这里只讲string和hash两种常用的数据类型

    连接.type(key): 查看key的类型

    string类型:(键key,值value)

      连接.set(key,value): 添加数据 

       

      如果key里有冒号,冒号前面部分会显示成文件夹

       

      

      连接.setex(key,value,ex): 添加数据,生效时间是ex秒

      

       

      连接.delete(key): 删除数据

       

      连接.get(key).decode(): 获取数据,查不到则返回None。注意:redis存的是byte类型,要用decode变成str类型

       

    hash类型:(大键name,小键key,值value)

       连接.hset(name,key,value): 添加数据

       

      如果name里有冒号,冒号前面部分会显示成文件夹

      连接.get(name,key).decode(): 获取数据,查不到则返回None。注意:redis存的是byte类型,要用decode变成str类型

      连接.hgetall(name): 获取某大键的所有数据

      

      转换成str

       

      连接.hdel(name,key): 删除小键,大键保留。删大键的方法和string的删除是一样的

       

      连接.expire(name): 设置失效时间

       

      

      连接.ttl(name): 获取失效时间

       

    连接.keys(): 获取所有key(包括string和hash数据类型)

     

    筛选指定类型

    筛选指定名称

     

    flask模块

    flask是用来做接口开发的,开发接口可以用来模拟未开发好的模块,做接口测试

    1、新建服务: flask.Flask(__name__)  其中__name__代表当前文件,这行代码的意思是把当前文件当做一个服务

    2、将普通代码变成服务:在函数前面增加一行@服务.route(路径,方法)  其中@是一个装饰器,用来扩展新功能

    3、运行服务:服务.run(地址,端口) ,默认端口号是5000

    4、在浏览器访问该路径

     

    组织代码

    Why:当代码短的时候,可以将代码都放在一个文件里。但是当代码很长的时候,都放在一个文件中就不方便查看和更改。需要把代码按逻辑分开,并加以组织,方便查看和更改。

    How:有一套行业长年累积的习惯(仿照的unix系统目录)

      bin目录存放可执行文件(二进制binary的缩写,但其实放的并不是二进制文件,仍然是.py文件,习惯放启停服务、程序的文件)

      lib存放函数文件(库library的缩写,自己定义的函数习惯放在这个文件夹下)

      config存放配置文件(配置configuration的缩写,习惯存放地址、端口号等常量)

    举个栗子:有一个比较长的接口.py文件,我们试着把它拆开

    import flask,json,hashlib,redis
    server=flask.Flask(__name__) #新建服务
    @server.route('/index',methods=['get','post'])
    def str2md5(str): #自己写的MD5摘要函数
       md = hashlib.md5()
       md.update(str.encode())
       return md.hexdigest()
    def op_redis(k,v=None): #自己写的redis读写函数
        r = redis.Redis(host='xxxxxxxx',password='HK139bc&*',port=6379,db=1)#数据库地址和账号
        if v:
            r.set(k,v)
            res='ok'
        else:

            res = r.get(k).decode() if r.get(k) else None
        return  res

    def login(): #接口主业务
        username=flask.request.values.get('username')
        pwd=flask.request.values.get('passwd')
        if op_redis(k=username)==str2md5(pwd): #密码要用MD5加密成密文
            res = {'login_info':'登录成功', 'error_code': 0}
        else:
            res = {'msg': '密码不正确', 'msg_code': '3001'}
        return json.dumps(res,ensure_ascii=False)
    server.run(port=8989,debug=True) #启动接口服务

     

    数据库地址、账号等参数,把它们放在一个文件中,称为setting,放在config文件夹下,使用这些常量的时候,直接调用from config.setting import 常量名

     

    比较常用的自定义的函数,把它们都放到一个文件中,称为tools,放到lib文件夹下,使用这些函数的时候,直接调用from lib.tools import 函数名

    **可以用来传字典格式的参数

    接口功能,把它们放在interface文件中,放到lib文件夹下,使用的时候,调用from lib.interface import server

    最后把启动服务这句,单放在一个文件中,称为start,放在bin文件夹下

    注意,要把上级文件夹设置成Source Root,文件夹会变成浅蓝色,如下

     到此,代码已全部拆分完毕,我们执行start这个文件,结果和拆分前是一致的

    以后要改数据库地址,直接到config/setting中修改即可

    要增加接口业务,直接到lib/interface中增加即可

    以后写代码再需要用md5和redis,直接调用lib.tools就可以了

    是不是很方便呢

     

  • 相关阅读:
    学号 2019-2020-1 《数据结构与面向对象程序设计》第四周学习总结
    20182317 2019-2020-1 《数据结构与面向对象程序设计》实验三报告
    学号 2019-2020-1 《数据结构与面向对象程序设计》第2&3周学习总结
    第二次实验报告
    20182317 《数据结构与面向对象程序设计》实验一报告
    # 学号 2019-2020-1 《数据结构与面向对象程序设计》第1周学习总结
    system_call中断处理过程
    系统调用过程
    Week4_Linux书本一二两章
    Linux系统的启动过程
  • 原文地址:https://www.cnblogs.com/ruijie/p/9018220.html
Copyright © 2020-2023  润新知