zoukankan      html  css  js  c++  java
  • python自动化测试-D6-学习笔记之二(操作mysql、redis数据库)

    一、python操作mysql数据库,需要先安装pymysql模块,由于电脑已经安装无法截图,大致过程如下

    1、windows 进入到python的安装目录下的scripts目录里,鼠标按住shift,然后右键点击在此处打开命令行,然后输入 pip install mysql

    2、使用过程中 import pymysql

          python操作redis数据库,需要先安装redis模块,由于电脑已经安装无法截图,大致过程如下

    1、下载redis模块  Redis-x64-3.2.100.zip

    2、解压后,在当前目录执行 python setup.py install

    二、python 操作mysql数据库

    1、流程大致分为如下几步:

    # 1、连接上mysql  ip 端口号  密码 账号 数据库
    # 2、建立游标
    # 3、执行sql
    # 4、获取结果
    # 5、关闭连接、关闭游标

    一步:建立连接

    # conn = pymysql.connect(host='211.149.218.16', port=3306, user='jxz', passwd='123456', db='jxz',charset='utf8') 
    # 其中 port 要写int类型,password写字符串,charset要写utf8 不能写utf-8

    第二步:建立游标

    # cur = conn.cursor() # 游标

    第三步:执行sql:

    # cur.execute('show tables;') #执行sql语句

     第四步:获取结果:

    # res = cur.fetchall() #获取sql语句执行的结果,是一个二维元组,每一条数据也是一个元组,打印结果:(('bt_stu',), ('hkk',), ('hkk2',), ('jxz_stu',), ('products_nyy',), ('stu',), ('user',), ('user_nyy',), ('user_passwd',), ('zmx',))
    # print(res)
    # cur.execute('select * from bt_stu limit 5;')
    # res1 =cur.fetchall()
    # print(res1) #打印结果((1, '贾梦缘', 1, '18612341231', '靠山屯', 1), (2, '处长', 0, '19212345678', '靠山屯', 1), (4, '处长', 0, '19312345678', '靠山屯', 1), (5, '处长', 0, '19312345671', '靠山屯', 1), (6, 'zdq', 0, '12312345678', '靠山屯', 1))
    # print(res1[0][3]) #取第一条结果的电话号 打印结果:18612341231

    # res2 = cur.fetchone() # 只获取一条结果,把结果放在元组里,打印结果:(1, '贾梦缘', 1, '18612341231', '靠山屯', 1)
    # print(res2)

    # print(cur.fetchone()) # 只获取一条结果,执行一次,取一条,也就是说第一次执行取的是(1, '贾梦缘', 1, '18612341231', '靠山屯', 1),这次执行取的结果是:(2, '处长', 0, '19212345678', '靠山屯', 1)
    # print(cur.fetchone()) #这次执行取的结果是:第三条(4, '处长', 0, '19312345678', '靠山屯', 1)


    # fetchone() 和 fetchall 同时用的时候,需要注意 指针的问题,读过一次了,再次用的时候,指针指向下一条

    # print(cur.fetchone()) # 只读第一条数据
    # print(cur.fetchall()) # 把第二条往后都打印出来
    # print(cur.fetchone()) # 啥也没读出来,因为上一条已经把文件都读出来了,指针在最后了,打印结果是:none
    #
    # cur.scroll(0,mode='absolute') # 移动游标到最前面,绝对路径,0指的是往后移动
    # print(cur.fetchone()) # 再次把第一条数据打印出来
    #
    # cur.scroll(0,mode='relative')# 移动游标到 相对于当前位置往后移动,如果上一条指针已经在最后了,则报 out of range
    # cur.scroll(-1,mode='relative') #负数往前移动
    # print(cur.fetchone())

    # cur.execute("INSERT INTO `bt_stu` ( `real_name`, `sex`, `phone`, `class`, `type`) VALUES ( '赵四儿', '1', '19332341231', '靠山屯', '1');")
    # conn.commit() # insert update delete 等语句需要commit一下,否则无法生效

    #指定curson的类型 字典类型,字典类型方便取值

    # cur = conn.cursor(cursor=pymysql.cursors.DictCursor)
    # cur.execute('select * from bt_stu limit 5;')
    # res = cur.fetchall()
    # print(res)# 打印结果list里面套字典:[{'class': '靠山屯', 'sex': 1, 'type': 1, 'phone': '18612341231', 'real_name': '贾梦缘', 'id': 502}, {'class': '哈哈哈', 'sex': 1, 'type': 1, 'phone': '18723561789', 'real_name': '王兰', 'id': 503}, …………………………

    第五步:关闭游标,关闭连接:

    # cur.close() # 关闭游标
    # conn.close() # 关闭连接

    三、python操作redis数据库
    # redis 也是一种数据库
    # 数据库分为:关系型数据库(mysql,oracle,sqlserver),和非关系型数据库 nosql类型,k-v格式的,目前流行的有 memcache,redis 存在内存里面,mongodb 数据还是存储在磁盘上
    import redis

    r = redis.Redis(host='211.149.218.16',
    password='123456',
    port=6379,
    db=2)# 连接数据库

    r.set('happy','clap your hands')# set数据,写数据,key是唯一的

    print(r.get('sherry')) # 打印结果是:b'hello world' 前面有个b
    print(r.get('dkfakdfhadfha'))# 打印一个不存在的key的时候,返回的是None
    print(r.get('happy').decode())# redis里面取出来的数据都是 bytes 类型的,所以要用decode()转成字符串

    r.delete('工藤新一') # 删除

    r.setex('angry','stomp your feet',10) # 指定key-value的失效时间,单位是秒

    # set get delete setex 操作的类型都是str类型

    # 哈希类型:key{key-value},哈希类型没有过期时间
    r.hset('shop','iphone','5299')
    r.hset('shop','ThinkPad','12999')
    print(r.hget('shop','iphone')) #获取指定key的数据 打印结果:b'5299'
    print(r.hgetall('shop')) # 获取key里的所有数据 字典格式 打印结果:{b'ThinkPad': b'12999', b'iphone': b'5299'}

    #把字典里的byte类型变成字符串,因为没有decode()方法,可以通过循环的方式来变成正常的字典
    redis_data=r.hgetall('shop')
    all_data={}
    for k,v in redis_data.items():
    k = k.decode()
    v = v.decode()
    all_data[k] = v
    print(all_data) # 打印结果: {'iphone': '5299', 'ThinkPad': '12999'}

    # key特别多,需要分类的时候,文件夹格式用‘:’来表示
    r.set('peking:shop:iphone7','6299')
    r.set('peking:shop:ThinkPad','16299') #结果是 db2 --> peking ——>shop 下面有key和value

    # print(r.hget('peking:shop:ThinkPad') peking:shop:ThinkPad 是字符串类型
    # print(r.get('peking:shop:'))# 打印结果是none,key没有写完全,取值的时候key必须写全了
    # print(r.keys())# 打印所有的key 放list里面
    # print(r.keys('txz*')) #支持模糊匹配
    # print(r.type('happy')) #打印结果:b'string'
    # print(r.type('shop')) #打印结果:b'hash'
    
    
  • 相关阅读:
    图片匹配大全(转载)
    《上游》笔记
    《不可能的技艺:巅峰表现入门》笔记
    《硅谷钢铁侠》笔记
    《火线上的适应:战争时期的军事变革》笔记
    《金钱心理学:财富、贪婪和幸福的永恒教训》笔记
    流量中提取文件的若干种方法
    《重新思考:知道你不知道什么的力量》笔记
    《史蒂夫·乔布斯传》笔记
    “利润”究竟是什么
  • 原文地址:https://www.cnblogs.com/blackbird0423/p/8343000.html
Copyright © 2011-2022 走看看