python编程:excel文件操作,redis数据库,接口开发

泄露秘密 提交于 2020-03-24 18:46:44
 

1、操作mysql

import pymysql
# 1、连上数据库  账号、密码 ip 端口号 数据库
#2、建立游标
#3、执行sql
#4 、获取结果
# 5、关闭游标
#6、连接关闭
coon = pymysql.connect(
   host='数据库ip',user='jxz',passwd='123456',
   port=3306,db='jxz',charset='utf8'
   #port必须写int类型,
   #charset这里必须写utf8
)
cur = coon.cursor() #建立游标
# cur.execute('select * from stu;')#执行sql语句
# cur.execute('insert into stu (id,name,sex) VALUE (1,"蓝波湾","男");')
username = 'nhy'
pwd='123456'
sql = 'select * from nhy where name="%s"  and pwd = "%s "'%(username,pwd)
cur.execute(sql)
# select * from nhy where username="nhy" and pwd="xxxx";
# delete update insert
# coon.commit()  #必须得coomit
#delete update insert 语句需要commit才能生效
res = cur.fetchall()  #获取所有返回的结果
print(res)
if res:
   print('用户已存在')
else:
   print('用户不存在!')
cur.close()#关闭游标
coon.close()#关闭连接

知识点1:

cur = coon.cursor(cursor=pymysql.cursors.DictCursor)

建立游标的时候指定了游标类型,返回的就是一个字典了。

fetchall() #获取到这个sql执行的全部结果,它把数据库表里面的每一行数据放到一个list里面

[ ['1','2','3'] ] [{},{},{}]

fetchone() #获取到这个sql执行的一条结果,它返回就只是一条数据

如果sql语句执行的结果是多条数据的时候,那就用fetchall()

如果你能确定sql执行的结果就只有一条,那么就用fetchone()

 

2、将数据库的数据导出为excel文档 ,示例:

# 需求:只要你传入一个表名,就能把所有的数据导入出来,字段名是excel的表头
# 1、要动态获取到表的字段 cur.description能获取到表的字段
#  fileds = [ filed[0] for filed in cur.description ]
# 2、获取数据了  select * from "%s"  % table_name
# 3、循环写入excel

import pymysql
import xlwt
def export_excel(table_name):
    host, user, passwd, db = '数据库ip', 'jxz', '123456', 'jxz'
    coon = pymysql.connect(user=user, host=host, port=3306, passwd=passwd, db=db, charset='utf8')
    #cur = coon.cursor(cursor=pymysql.cursors.DictCursor)
    cur=coon.cursor()#建立游标,指定cursor类型返回的是字典

    sql='select * from %s;'%table_name
    cur.execute(sql)
    # fileds=[]
    # for filed in cur.desription:
    #     fileds.append(filed[0])
    fileds=[filed[0] for filed in cur.description]#列表生成式,与上面三行代码效果一样,获取所有的字段
    all_data=cur.fetchall()
    book=xlwt.Workbook()
    sheet=book.add_sheet('sheet1')
    # col=0
    # for filed in fileds:
    #     sheet.write(0,col,filed)
    #     col+=1
    for col,filed in enumerate(fileds):#写表头的
         sheet.write(0,col,filed)
    #print(all_data)
    row=1#行数,第一行为字段名
    for data in all_data:#行
        for col,filed in enumerate(data):#控制列
            sheet.write(row,col,filed)
        row+=1#每次写完一行,行就加1
    book.save('%s.xls'%table_name)
export_excel('app_student')

 

 

知识点1:

enumerate([list,list2]) #循环的时候,直接获取到下标,和值

for index,value in enumerate([list,list2]):

print(index,vlaue)

 

知识点2:双层循环,先循环里面的,再循环外面的

for i in range(5):

for j in range(3):#双层循环

print(j)

 

 

3、读excel文件内容,示例:

import xlrd
book = xlrd.open_workbook('app_student.xls')
sheet = book.sheet_by_index(0)
sheet2 = book.sheet_by_name('shee1')
print(sheet.cell(0,0).value) #指定sheet页里面行和列获取数据
print(sheet.cell(1,0).value) #指定sheet页里面行和列获取数据
print(sheet.row_values(0)) #这个获取到第几行的内容
print(sheet.row_values(1)) #这个获取到第几行的内容
print(sheet.nrows) #获取到excel里面总共有多少行
for i in range(sheet.nrows):  #循环获取到每行数据
   print(sheet.row_values(i))
print(sheet.ncols)  #总共多少列
print(sheet.col_values(0)) #取第几列的数据

 

4、修改excel文件,示例:

#import xlutils,xlrd#xlutils模块不能直接导入使用
import xlrd
from xlutils import copy
book=xlrd.open_workbook('app_student.xls')
#先用xlrd模块,打开一个excel
new_book=copy.copy(book)
#通过xlutils这个模块里面的copy方法,复制一份excel
sheet=new_book.get_sheet(0)#是xlutils的方法,获取到sheet页
# sheet.write(0,0,'编号')
# sheet.write(0,1,'名字')
# sheet.write(0,2,'性别')
lis = ['编号','名字','性别','年龄','地址','班级','手机号','金币']
# for i in range(sheet.nrow):
#     sheet.write(0,i,row_value(i))
for col,filed in enumerate(lis):#enumerate([list,list2])  #循环的时候,直接获取到下标和值
    sheet.write(0,col,filed)
new_book.save('app_student.xls')

 

二、redis数据库操作

1、redis数据库概念

redis也是一个非关系型数据库。

关系型数据库

mysql、oracle、sql server、db2、sqlite

sql

数据存在磁盘上

非关系型数据库

没有表

没有sql语句

key-value 类似字典

取数据方便\速度快

类型有:mongodb、redis

get('k')

set('xx')

 

redis数据全部都是存在内存里面。

redis本身性能是非常好的,每秒支持30w次的读写。

 

2、redis增删改查

import redis

r = redis.Redis(host='数据库ip',password='HK139bc&*',db=1,port=6379)

#增删改查
# r.set('niuhanyang','帅!') #数据库里面新增一个值
#修改也是set
# r.delete('niuhanyang')
#r.setex('python_123','哈哈哈',20)  #设置key的失效时间,最后这个参数是秒
# hwt = r.get('hwt')
# print(hwt.decode())
# print(r.keys('*xxx*'))#获取到所有的key
# print(r.get('sdfsdf'))
# r.set('天蝎座:mpp','呵呵呵')
# r.get('天蝎座:mpp')

# 上面操作都是针对 string类型
# for k in r.keys():  #删除所有的key
#  r.delete(k)

# 哈希类型  hash   嵌套字典
# r.hset('stu_info','刘伟','1m8 100w存款')
# r.hset('stu_info','张流量','浪,为了不交作业,故意让狗咬他')
# r.hset('stu_info','董春光','为了不交作业,找了一条狗咬张流量,然后陪张流量去医院')
# print(r.hget('stu_info','张流量').decode())  #指定大key和小key获取对应的数据
# print(r.hgetall('stu_info'))  #获取里面所有的k和-v
# stu_info  = r.hgetall('stu_info')
# r.hdel('stu_info','gyx')  #删除指定key
# r.delete('stu_info')  #删除整个key
r.expire('aaa',100) #第一个key设置失效时间
new_stu_info = {}
# for k,v in stu_info.items():
#  new_stu_info[k.decode()] = v.decode()
# print(new_stu_info)

# print(r.type('stu_info'))  #查看key是什么类型的
# print(r.type('zll'))

# s='呵呵'
# s.encode() #把字符串转成二进制
# hwt = b'sdfsdfsdf'
# hwt.decode()  #把bytes类型转成字符串

3、redis操作练习:把mysql数据库的这个表里面的数据存到redis里面

#pymysql、json、redis
#1、连mysql数据库,查到数据库里面所有的数据,游标类型要用pymysql.curosrs.DictCour
#2、查到所有数据   [ {"id":1,"passwd":"49487dd4f94008a6110275e48ad09448","username":"niuhayang","is_admin":1}]
#3、循环这个list,取到usernamer,把username当做key
#4、再把这个小字典转成json,存进去就ok。
import pymysql,json,redis
r = redis.Redis(host='数据库ip',password='HK139bc&*',db=1,port=6379)
conn = pymysql.connect(host='数据库ip'',user='jxz',passwd='123456',db='jxz',charset='utf8')
cur = conn.cursor(cursor=pymysql.cursors.DictCursor)
cur.execute('select * from my_user;')
all_data = cur.fetchall()
for data in all_data:
   k = data.get('username')
   r.hset('stu_info_nhy',k,json.dumps(data))#把字典转成json串
cur.close()
conn.close()

三、接口开发

1、get接口,代码示例:

import flask,json
#__name__,代表当前这个Python文件

server=flask.Flask(__name__)#把当前这个python文件当做一个服务
#ip:8000/index?uge
@server.route('/index',methods=['get'])#把一个函数变为接口
def index():
    res={'msg':'这是我开发的第一个接口','msg_code':0}
    return json.dumps(res,ensure_ascii=False)
server.run(port=8888,debug=True)

在浏览器输入接口URL地址:http://127.0.0.1:8888/index,点击enter,返回res值

 

 

2、post接口,以注册接口为例,代码示例:

def my_db(sql):
   import pymysql
   coon = pymysql.connect(
      host='数据库ip', user='jxz', passwd='123456',
      port=3306, db='jxz', charset='utf8')
   cur = coon.cursor() #建立游标
   cur.execute(sql)#执行sql
   if sql.strip()[:6].upper()=='SELECT':
      res =  cur.fetchall()
   else:
      coon.commit()
      res = 'ok'
   cur.close()
   coon.close()
   return res

import flask,json
#__name__,代表当前这个Python文件

server=flask.Flask(__name__)#把当前这个python文件当做一个服务
@server.route('/reg',methods=['post'])
def reg():
    username=flask.request.values.get('username')#用来存储输入的用户名
    pwd=flask.request.values.get('passwd')#用来存储输入的密码
    if username and pwd:
        sql='select * from my_user where username="%s";'%username
        if my_db(sql):
            res={'msg':'用户已存在','msg_code':2001}
        else:
            #insert_sql='insert into my_user(username,passwd,is_admin) values("%s","%s",0);'%(username,pwd)
            insert_sql = 'insert into my_user (username,passwd,is_admin) values ("%s","%s",0);' % (username, pwd)
            my_db(insert_sql)
            res={'msg':'注册成功','msg_code':0}
    else:
        res={'msg':'必填字段未天,请查看接口文档!','msg_code':1001}
        # 1001必填字段未填
    return json.dumps(res,ensure_ascii=False)
server.run(port=8989,debug=True)#debug=True,改了代码后,不用手动重启,会自动重启
#server.run(port=8888,debug=True,host='0.0.0.0')#局域网别人用你的ip就可以访问你的接口

postman测试接口

 

 

 

 

 

另外:如果电脑里面装了多个版本的python,用pip安装模块

python3 -m pip instatll xlutils

python2 -m pip instatll xlutils

 

可以不用改python.exe文件名,但是要在对应目录下执行命令

c:\Miniconda3>python -m pip install xlrd

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!