python_json与pymsql模块
一。json
1.初识json
json:全称(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
辨认是否是json:类似与python中的dict
1)通过在线json格式校验,判断是否是json
2.json类型转换
1)json数据格式与python某些模块不一致:
python ---> json
None --->null
True --->true
False --->false
2)python中json数据转换
1.引用
import json
把json的str数据转换为python字典:loads()
json_str='{"mobile_phone":true,"password":null}'
print(json.loads(json_str))
运行结果:
把python中的dict转换为json:dumps()
python_dict={'mobile_phone': None, 'password': False}
print(json.dumps(python_dict))
运行结果:
使用场景探讨:
1)excel:若把接口请求数据放在xlsx后缀文件中,读取的数据为str格式,无法直接作为参数进行传递 使用python中的eval()可以拿到数据本来的格式,但是数据若为json格式(null,true,false)命名规则就会报错。如图:
python_eval='{"mobile_phone":true,"password":null}'
print(eval(python_eval))
运行结果:
二。pymysql
1.安装
pip install pymysql
2.引用
import pymysql
3.使用
1)建立连接conn=pymysql.connect(
host="",#连接地址
port=3306,#端口号
user="",#连接名字
password="",#密码
charset="utf8",#数据格式
cursorclass=DictCursor #返回数据格式为dict
)
2)建立游标
cursor=conn.cursor()
print(cursor)
运行结果:
3)执行sql
sql_data="select * from futureloan.member limit 5;"
cursor.execute(query=sql_data)
4)返回数据
#获取数据,获取满足条件的一条数据
print(cursor.fetchone())
运行结果:
#获取满足条件的所有数据
print(cursor.fetchall())
运行结果:
5)关闭连接
#关闭游标
cursor.close()
#关闭连接
conn.close()
6)注意
1 -- >一个游标只能执行一个sql语句,若需要执行多个sql语句 就多建立几个游标(游标1,游标2...)。
2 -->游标使用完毕后记着关闭游标,获取一次数据后 不关闭游标再次获取数据,就会从第一次获取的结果出开始获取数据,例子:
#把满足条件的数据全部获取
print(cursor.fetchall())
#获取全部数据后,不关闭游标继续获取单条数据,此时返回为None
print(cursor.fetchone())
运行结果:
3 -->执行完数据库操作(如 插入,更新删除后)最好是关闭游标和关闭连接后,重新建立连接,创建游标进行搜索。
4.与random库联合使用,生成数据库中没有的数据
1)random
random.choice(['11','xx','jj']) -->从‘11’,'xx','jj'中随机获取一个数值
random.sample('12345',4) -->从'12345'中输出一个4位随机组合的数值
思考:
随机生成的数据数据库中有时候也是存在的,如果有次情况的话还是需要继续生成数据的,问题来了怎么再生成数据 再生成的数据怎么知道数据库中存不存在?若不存在怎么为自己所用?怎么作用与测试用例中?
解决:
1.首先考虑while True,使用外循环不断进行数据生成,顺便也可以进行数据库比对,若不存在数据库的话返回该数据,使用break进行终止请求
while True:
phone_headler = random.choice(['13', '15', '18'])
phone_w = "".join(random.sample('0123456789', 9))
phone=phone_headler+phone_w
#print(phone)
if not cursor.execute(query="select * from futureloan.member where mobile_phone={};".format(phone)):
print(phone)
cursor.close()
break
运行结果:
数据库搜索结果:
2.进行数据替换。先进行思考,测试用例写在哪里,读取的数据是什么格式的,对于格式的替换数据方法可以使用什么。我这里使用的是slsx文件,读取的数据类型为str,以str为例进行初步替换:
replace()
data='{"mobile_phone":"#phone#","password":12345}'
phone='18139702685'
if "#phone#" in data:
print(data.replace("#phone#",phone))
运行结果:
三。使用跳板机连接mysql
1.安装环境:
pip install sshtunnel
注意:安装时出现windowns错误,参考:https://blog.csdn.net/weixin_40547993/article/details/89399825
2.连接
资料参考地址:https://www.cnblogs.com/sidianok/p/12571798.html
import pymysql
from sshtunnel import SSHTunnelForwarder
with SSHTunnelForwarder(
# 指定ssh登录的跳转机的address
ssh_address_or_host = ('host', port),
# 设置跳转机密钥
#ssh_pkey = private_key,
# 设置跳转机的密码,如果是通过密码访问,可以把下面注释打开,将密钥注释即可。
ssh_password = "password"
# 设置跳转机用户
ssh_username = 'username',
# 这里是需要连接的数据库服务地址及端口
remote_bind_address= ('host',port)) as server:
conn = pymysql.connect(database='dbname',
user='username', #这里是需要连接数据库的账号信息
password='password',#这里是需要连接数据库的密码信息
host='127.0.0.1', # 因为上面没有设置 local_bind_address,所以这里必须是127.0.0.1,如果设置了,取设置的值就行了。
port=server.local_bind_port) # 这里端口也一样,上面的server可以设置,没设置取这个就行了
print(conn)
cur = conn.cursor()
# 执行查询,查看结果,验证数据库是否链接成功。
cur.execute("select * from t_table_data limit 1")
rows = cur.fetchone()
print(rows)
conn.close()