学习记录006-网络请求/requests/redis数据库/接口开发
【循环游标的结果:】
import pymysql def get_date(table): #传入一个表名 conn = pymysql.connect(host = "116.24.5.50",user = "cnz",password = "123456",db = "cnz",charset = "utf8") cur = conn.cursor(pymysql.cursors.DictCursor) cur.execute("select * from %s"%table) for d in cur: print("这是循环游标的结果:",d) get_date("app_student")
最后的输出结果为:二维数组里面单条的字典结果
所以,如果只是循环游标,那么输出结果即为数据库对应的每条数据
【函数:zip】
list1 = [1,2,3,4] list2 = [5,6,7,8] print zip(list1,list2) #输出结果是 [(1, 5), (2, 6), (3, 7), (4, 8)]
这里可压缩列表,也可以进行压缩字典和字符串
不管是什么,ZIP会以最短序列的长度为准来截断所得到的元组列表
【对比数据库数据】
场景1---进行两台数据库里面各自两个表的数据的对比:
建立两个连接,然后建立两个游标即可
场景2---还是在一个服务器机器上,但是是不同的数据库:
那么建立连接的时候:cur.execute("select * from 数据库名字.表名;")进行数据库名字的写入即可,并不是说在一开始建立连接的时候写那个哪个数据库就是哪个数据库,且不用切换等操作
【requests模块】
# import requests # url = "http://api.nnnji.cn/api/user/stu_info" # d = {"name":"xiaohei"} # r = requests.get(url,d) #这里是需要填写参数的get请求
场景一:如果想要输出返回字典类型,方便取值,那么就以.jsin取值:print(r.json())
# print("r.json:",r.json()) #返回的是一个字典(想要取值可用) # 返回:{'error_code': 2, 'msg': '无结果'}
场景二:如果想要输出返回字符串类型,想要写入文件,那么就以.text取值:print(r.text)
# print("r.text",r.text) #返回的是一个字符串(想要写入文件可用) # 返回:{ # "error_code": 2, # "msg": "无结果" # }
场景三:如果想要输出值为bytes类型,方便进行文件的写入,比如视频音频图片的下载写入,那么就以.content取值:print(r.content)
# print("r.content:",r.content) #返回的是,bytes类型,可进行歌曲或者视频的下载 # 返回:b'{\n "error_code": 2,\n "msg": "\xe6\x97\xa0\xe7\xbb\x93\xe6\x9e\x9c"\n}'
【数据库:redis】
先来说下对数据库的了解:数据库的分类分为关系型数据库和非关系型数据库;什么叫关系型数据库呢?就是库里面的表和表对应的有关联关系,比如用户表里面肯定有用户名的唯一id,那么如果有一个购物平台的话,针对每个用户的记录也是根据唯一id来做区分,那么表与表之间只有关联的,这就是关系型数据库;那么什么叫非关系型数据库呢?那就是表之间是没有关联关系的,也就没有sql语句,每条数据就是key和value的对应关系;和关系型数据库相比,他的优势是读取数据快,因为没有解析sql语句的过程
非关系型数据库有:mangodb/nosql/memcache/redis
关于redis:数据存于内存,所以读取速度快,每秒支持10w次的读写,所以如果是频繁使用的数据可以存放在redis里面
-----string类型
我们先来看下string类型在redis数据库显示的样子
左侧是数据的key,右侧内容页面显示为string类型对应key的name,value对应value的值
操作数据:
import redis r = redis.Redis(host ="119.23.1.40",password="123456*",db=0) #db=0意为当前操作连接的数据库第几个,如果一个都没写的话那就是默认第一个 # 操作插入添加数据:添加的数据的类型不限 # 操作修改数据:即原有key已存在,那么再传对应key的新的value会被覆盖 # r.set("name","小黑") # 获取数据库key对应的值 # print(r.get("name").decode()) #decode的作用是把输出的默认的bytes类型数据转化成字符串 # 删除某个key:输入key值即可 # r.delete("key值") # 场景:如果想在一个库下面建立一个文件夹方便查看自己建立存储的数据 r.set("gyn_user:guo_passwd","123456") # 输出:对应库下面会建个名为:gyn_user的文件夹,随后在文件夹里面会有一条数据,即key为:gyn_user:guo_passwd,value为:123456 # 操作新建key的时候增加失效时间 r.set("key","value",9) # 删除当前db下所有的key # r.flushdb() # 删除数据库里面所有的key # r.flushall() # 获取当前数据库里面所有的key,如果在里面添加特定字符串,比如:"测试",那么也有过滤的作用,即:根据条件可进行筛选或者判断 print(r.keys()) #输出当前库下所有的key print(r.keys("name")) #过滤key为name的key # 判断key是否存在,如果存在返回1,如果不存在返回0 print(r.exists("name"))
-----hash数据类型
在redis里面,hash类型的数据是以一个大key集合下面有小key和对应的value形式进行展现的,相对string类型数据比较直观集中,更像是一个字典:
大key{
"小key1:"value1",
"小key2":"value2",
........
}
操作数据:
r.hset("ce","age",277)#这里插入的"ce"就是上面例子的字典的名字,也就是大key,那么"name"对应的就是小key,guo就是value,hash类型插入数据格式固定 # r.hset("ce","name","xiugai") #进行key对应value数据的修改 # r.hdel("name","guo") #删除hash数据类型的小key,需要使用方法hdel,且输入数据为小key和对应value的格式进行删除 # r.delete("ce") #删除大key,需要使用方法delete,输入删除的大key name即可 # print(r.hget("ce","name").decode()) #获取指定key的值,以字符串的方式进行输出 # print(r.hgetall("ce")) #获取到所有的key和对应的value # r.hmset("cnz_user",{"name":27,"age":"hanmeimei"}) #批量插入数据,大key为:cnz_user,对应的小key和value为字典里面的key和value # print(r.type("cnz_user")) #查看类型,输入key进行查看 r.expire("ce",20) #给key值增加失效倒计时时间,这里输入的为大key即可
【接口开发】
学习接口开发的作用:
1 做Mock接口;场景:由于工作不协调的原因,或者为了方便自己需要写一个,所以模拟接口调用自己写的接口进行测试
2 给别人提供数据:自己写的接口,可供自己限定的条件供别人访问