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
来源:https://www.cnblogs.com/zhouly-008/p/9026877.html