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()#关闭连接

 

.

posted @ 2018-05-11 16:20  whereis  阅读(473)  评论(0编辑  收藏  举报