zoukankan      html  css  js  c++  java
  • python笔记六(修改excel,内置函数,接口开发,操作redis,操作数据库,读excel)

    1.修改excel

     1 # python3 -m pip instatll xlutils   #指定装到那个Python版本的(针对有多个Python)
     2 import xlrd
     3 from xlutils import copy
     4 book = xlrd.open_workbook('students.xls')
     5 #先用xlrd模块,打开一个excel
     6 new_book = copy.copy(book)
     7 #通过xlutils这个模块里面的copy方法,复制一份excel
     8 sheet = new_book.get_sheet(0)#获取sheet页
     9 list = ['编号','名字','性别','年龄','班级','地址']
    10 # col = 0
    11 # for i in list:
    12 #     sheet.write(0, col, i)
    13 #     col+=1
    14 for col,filed in enumerate(list): #和上面的四行一样的
    15     sheet.write(0, col, filed)
    16 # sheet.write(0,0,'编号')
    17 # sheet.write(0,1,'名字')
    18 new_book.save('students.xls')

    2.读excel

     1 import xlrd
     2 book = xlrd.open_workbook('students.xls')
     3 sheet = book.sheet_by_index(0)#根据下标
     4 sheet1 = book.sheet_by_name('sheet1')#根据名字
     5 print(sheet.cell(0,0).value)#指定sheet页里面的行和列
     6 print(sheet.cell(1,0).value)#指定sheet页里面的行和列
     7 print(sheet.row_values(0))#这个是获取到第几行的内容
     8 print(sheet.row_values(1))
     9 print(sheet.nrows)#获取到excel里面一共有多少行
    10 print(type(sheet.nrows))
    11 for i in range(sheet.nrows):#循环获取到每行的数据
    12     print(sheet.row_values(i))
    13 print(sheet.ncols)#总共多少列
    14 print(sheet.col_values(0))#取第几列的数据
    15 for i in range(sheet.ncols):#循环获取到每列的数据
    16     print(sheet.col_values(i))

    3.通用导出excel

     1 import pymysql,xlwt
     2 def export_excel(table_name):
     3     host,user,passwd,db = '192.168.174.128','root','123456','zuoye'
     4     coon = pymysql.connect(user = user,
     5                                host = host,
     6                                port= 3306,
     7                                passwd = passwd,
     8                                db=db,
     9                                charset='utf8'
    10                                )
    11 
    12     cur = coon.cursor()#建立游标,指定cursors类型返回的是字典
    13     sql  = 'select * from %s;'%table_name
    14     cur.execute(sql)
    15     fileds = [filed[0] for filed in cur.description]  # 这一行代码与上面三行的是一样的
    16     res = cur.fetchall()
    17     book = xlwt.Workbook()
    18     sheet = book.add_sheet('sheet')
    19     col = 0
    20     for filed in fileds: #写标头
    21         sheet.write(0,col,filed)
    22         col+=1
    23     row = 1  # 行数
    24     for date in res:  # 控制行数
    25         col = 0
    26         for filed in date:  # 写标头
    27             sheet.write(row, col, filed)
    28             col += 1
    29         row += 1  # 每次写完一行,行数加1
    30     book.save('%s.xls'%table_name)
    31 export_excel('students')

    4.内置函数:enumerate()这个函数能自动的计算下标

     1 enumerate()#这个函数能自动的计算下标
     2 fileds = ['id','name','sex','addr']
     3 for index,fiiled in enumerate(fileds):
     4     print(index,fiiled)
     5 
     6 
     7 import pymysql,xlwt
     8 def export_excel(table_name):
     9     host,user,passwd,db = '192.168.174.128','root','123456','zuoye'
    10     coon = pymysql.connect(user = user,
    11                                host = host,
    12                                port= 3306,
    13                                passwd = passwd,
    14                                db=db,
    15                                charset='utf8'
    16                                )
    17 
    18     cur = coon.cursor()#建立游标,指定cursors类型返回的是字典
    19     sql  = 'select * from %s;'%table_name
    20     cur.execute(sql)
    21     fileds = [filed[0] for filed in cur.description]  # 这一行代码与上面三行的是一样的
    22     res = cur.fetchall()
    23     book = xlwt.Workbook()
    24     sheet = book.add_sheet('sheet')
    25     for col,filed in enumerate(fileds): #写标头
    26         sheet.write(0,col,filed)
    27     row = 1#行数
    28     for date in res:#控制行数
    29         for col, filed in enumerate(date):  # 控制列
    30             sheet.write(row, col, filed)
    31         row+=1#每次写完一行,行数加1
    32     book.save('%s.xls'%table_name)
    33 export_excel('students')

    5.操作数据库,区分获取SQL的集中方法:

    res = cur.fetchall()#获取到这个sql执行的全部结果[['1','2']] [{},{}]他把数据库表里面的每一行数据放到一个list里面
    res = cur.fetchone()#获取到这个sql执行的一条结果,他返回就只是一条数据
    #如果sql语句执行的结果是多条数据的时候那么就用fetchall()
    #如果你能确定sql执行的结果就只有一条,那么就用fetchone()
    cur.fetchmany()#能传入一个个数,返回多少条数据
     1 #数据操作封装函数
     2 def my_db(sql,port=3306,charset='utf8'):
     3     import pymysql
     4     host,user,passwd,db = '192.168.174.128','root','123456','zuoye'
     5     coon = pymysql.connect(user = user,
     6                            host = host,
     7                            port= port,
     8                            passwd = passwd,
     9                            db=db,
    10                            charset=charset
    11                            )
    12 
    13     cur = coon.cursor(cursor=pymysql.cursors.DictCursor)#建立游标,指定cursors类型返回的是字典
    14     # 建立游标的时候指定游标类型,返回的就是一个字典
    15     cur.execute(sql)#执行sql
    16     if sql.strip()[:6].upper()=='SELECT':
    17         # fileds = []
    18         # for filed in cur.description:
    19         #     fileds.append(filed[0])
    20         fileds = [filed[0] for filed in cur.description]#这一行代码与上面三行的是一样的
    21         print(fileds)
    22         res = cur.fetchall()#获取到这个sql执行的全部结果[['1','2']] [{},{}]他把数据库表里面的每一行数据放到一个list里面
    23         # res = cur.fetchone()#获取到这个sql执行的一条结果,他返回就只是一条数据
    24     #如果sql语句执行的结果是多条数据的时候那么就用fetchall()
    25     #如果你能确定sql执行的结果就只有一条,那么就用fetchone()
    26         #cur.fetchmany()#能传入一个个数,返回多少条数据
    27     else:
    28         coon.commit()
    29         res = 'ok'
    30     cur.close()
    31     coon.close()
    32     return res
    33 res=my_db('select * from students limit 10;')
    34 print(res)

    6接口开发

     1 #__name__ #代表当前这个Python文件
     2 server = flask.Flask(__name__)#把当前这个Python文件,当做一个服务
     3 
     4 def my_db(sql):
     5     import pymysql
     6     coon = pymysql.connect(
     7         host='118.24.3.40', user='jxz', passwd='123456',
     8         port=3306, db='jxz', charset='utf8')
     9     cur = coon.cursor() #建立游标
    10     cur.execute(sql)#执行sql
    11     if sql.strip()[:6].upper()=='SELECT':
    12         res =  cur.fetchall()
    13     else:
    14         coon.commit()
    15         res = 'ok'
    16     cur.close()
    17     coon.close()
    18     return res
    19 
    20 
    21 
    22 @server.route('/index',methods=['get','post'])#默认methods这个参数不写,默认是get请求
    23 def index():
    24     res = {'msg':'这是我开发的第一个接口','mag_code':0}
    25     return json.dumps(res,ensure_ascii=False)
    26 
    27 
    28 @server.route('/reg',methods=['post'])#代表用post请求
    29 def reg():
    30     username= flask.request.values.get('username')
    31     pwd= flask.request.values.get('passwd')
    32     if username and pwd:
    33         sql = 'select * from my_user where username = "%s";'%username
    34         if my_db(sql):
    35             res = {'msg':'用户已存在','msg_code':2001}
    36         else:
    37             insert_sql = 'insert into my_user(username,passwd,is_admin) values ("%s","%s",0);'%(username,pwd)
    38             my_db(insert_sql)
    39             res = {'msg':'注册成功','msg_code':0}
    40     else:
    41         res = {'msg':'必填字段,请查看接口文档','msg_code':1001}#1001必填字段未填
    42     return json.dumps(res,ensure_ascii=False)
    43 
    44 
    45 server.run(port=666,debug=True,host='0.0.0.0')#设置端口号,debug=True:改了代码之后,不用重启。自己帮我们重启
    46 # host = 0.0.0.0 表示别人访问的时候,用你的ip就可以访问了

    7.操作redis

     1 # redis存到内存里面,电脑重启时就会没有,所以没办法持久化
     2 # redis本身性能是非常好的,每秒支持30w次读写
     3 import redis
     4 r = redis.Redis(host='118.24.3.40',password='HK139bc&*',db=1,port=6379)
     5 #增删改查
     6 r.set('flower','') #数据库里面新增一个值
     7 #修改也是set
     8 r.delete('flower')
     9 r.setex('py3','hahah',20)#设置key的失效时间,最后这个参数是秒
    10 test = r.get('flower')
    11 print(test.decode())
    12 print(r.get('dsdsdsd')) #get一个什么都不存在的字符串返回一个NOne
    13 s= '美女'
    14 s.encode() #把字符串转为二进制
    15 hwt = b'sdsadsad'
    16 hwt.decode()#把bytes类型转为字符串
    17 
    18 #获取值
    19 print(r.keys())#获取到所有key
    20 print(r.keys('f*'))#写参数代表查询以f开头的所有key
    21 print(r.keys('*f'))#写参数代表查询以f结尾的所有key
    22 
    23 r.set('天蝎座:admin','聪明')#只要key里面有冒号的,冒号前面的就是文件夹的名字,冒号必须是英文类型
    24 # # 多个文件夹,就是往后面直接冒号即可
    25 r.set('天蝎座:admin:admin1','聪明')
    26 
    27 for k in r.keys():#删除所有的key
    28     r.delete(k)
    29 
    30 #上面的操作都是针对string类型
    31 
    32 
    33 #下面的是哈希类型 hash  就和嵌套字典一样
    34 r.hset('stu_1','admin','胖喂喂喂二翁翁翁翁无')
    35 print(r.type('stu_1'))#查看key是什么类型
    36 #获取值
    37 print(r.hget('stu_1','admin').decode()) #指定大key和小key获取对应的数据
    38 
    39 print(r.hgetall('stu_1'))#获取里面的所有key和value
    40 res = r.hgetall('stu_1')
    41 new_res = {}
    42 for k,v in res.items():
    43     new_res[k.decode()]=v.decode()
    44 print(new_res)
    45 
    46 r.hdel('stu_1','admin')#删除指定的key
    47 r.delete('stu_1')#删除整个key
    48 print(r.ttl('stu_1'))#获取失效时间
    49 r.expire('stu_1',100)#对一个key设置失效时间
    50 
    51 
    52 #1.链接数据库,插到数据库里面所有的数据,游标类型要用pymysql.cursors.DictCursor
    53 #2.查询所有数据
    54 #3.循环list。取到username,把username当成key
    55 #4.再把这个小字典转成json,存进去就ok
    56 
    57 import pymysql
    58 import json,redis
    59 r = redis.Redis(host='118.24.3.40',password='HK139bc&*',db=1,port=6379)
    60 coon = pymysql.connect(
    61     host='118.24.3.40',user='jxz',passwd='123456',
    62     port=3306,db='jxz',charset='utf8'
    63 )
    64 cur = coon.cursor(cursor=pymysql.cursors.DictCursor) #建立游标
    65 cur.execute('select * from my_user;')
    66 res = cur.fetchall()  #获取所有返回的结果
    67 for i in res:
    68     k = i.get('username')
    69     r.hset('stu_info_y',k,json.dumps(i))
    70 cur.close()#关闭游标
    71 coon.close()#关闭连接

    .

  • 相关阅读:
    关于中间件(Middleware)的理解
    强类型约束的中间件(IMiddleware)
    常规中间件(Conventional Middleware) 之 自定义中间件
    常规中间件(Conventional Middleware) 之 内联中间件(in-line middleware)
    git 遴选(cherry-pick)
    sql转linq
    python知识体系
    when 的使用
    关于联表查询时NULL值的处理
    $project 选择要显示的字段
  • 原文地址:https://www.cnblogs.com/xmhd/p/9025309.html
Copyright © 2011-2022 走看看