文章介绍
本文主要介绍在pycharm集成开发坏境中,使用python语言,利用psycopg2第三方库,向postgre数据库中插入数据,为测试环境构造模拟数据的过程。
包括psycopg2介绍、random函数介绍,以及根据案例一个具体的数据库表里插入20条记录进行代码拆分。
使用场景:为web 列表页造测试数据,以测试下拉框、页面跳转、查询等功能
为了测试以上内容,需要在web页面构造测试数据,接下来介绍psycopg2插件及random函数。
psycopg2介绍
什么是psycopg2?
psycopg2是一个用于访问PostgreSQL数据库的第三方库。
它提供了一个简单易用的API,使得在Python程序中进行数据库操作变得容易,包括查询、插入、更新和删除等操作。psycopg2基于C语言实现,具有高效性,能够提供高效的数据库操作。
特别注意psycopg2是特别针对PostgreSQL的数据库,如果你的数据库是其他类型还需要替换其他插件如sqlalchemy,SQLAlchemy适用于多种数据库库,包括MySQL、PostgreSQL、SQLite、Oracle等。
psycopg2使用过程:
总共分为6个过程
-
安装psycopg2库。可以通过pip安装,使用命令:pip install psycopg2。
-
建立与数据库的连接。
import psycopg2
# 创建连接对象
conn = psycopg2.connect(
host="localhost", #指定数据库服务器的地址
database="mydatabase", #指定要连接的数据库的名称
user="myuser", #指定用于连接到数据库的用户名,这里是myuser
password="mypassword" #指定用于连接到数据库的密码,这里是mypassword
)
-
创建游标对象cur = conn.cursor()
-
执行SQL语句,插入数据。可以使用execute()方法执行SQL语句。
cur.execute("INSERT INTO mytable ("INSERT INTO device_water (id, device_water_id, data_group,) VALUES ({id}, {device_water_id}, '{data_group}') #向device_water表里id, device_water_id, data_group字段插入数据
-
提交事务,conn.commit()
-
关闭游标和连接cur.close() conn.close()
random函数
接下来就案例中用到random函数常用的语法进行介绍:
-
random.randint(a, b):返回一个[a, b]范围内的随机整数,包括a和b。
Eg: del_flag = random.randint(0, 1)
-
random.choice(a,b)从给定的集合中返回随机元素。
Eg:workspace_code=''.join(random.choices('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', k=5))
workspace_code变量将包含一个随机的5位字符串,由小写字母、大写字母和数字组成。
真实案例
比如我们要添加的数据库表device_water,数据库查看表属性的方法为:选择表->点击生成SQL->选择DDL,根据这些属性编写构造测试数据脚本。
psycopg2模拟数据过程
安装插件:pip install psycopg2
结果如下:
然后,使用以下Python脚本使用psycopg2生成测试数据并插入到public.device_power表中:
import random
from datetime import datetime
import psycopg2
# 创建数据库连接
conn = psycopg2.connect(
host='47.94.197.155',
port=5432,
dbname='ems-gqt-db-wx',
user='ems',
password='ems_2022'
)
# 获取游标对象
cur = conn.cursor()
# 定义插入数据的函数
def insert_data():
while True:
id = random.randint(0, 99999999)
device_water_id = random.randint(0, 99999999)
# 检查id是否存在
check_query = f"SELECT * FROM device_water WHERE id = {id} OR device_water_id = {device_water_id}"
cur.execute(check_query) # 执行SQL语句
result = cur.fetchone() # 返回一行数据
if result is None:
break # 如果结果为空,跳出循环
data_group = random.choice(['farm1', 'farm2'])
water_code = ''.join(random.choices('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890', k=8))
water_name = ''.join(random.choices('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', k=5))
water_type_code = random.choice(['production', 'life'])
process_code = ''.join(random.choices('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', k=5))
flowmeter_code = ''.join(random.choices('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', k=5))
is_total_consumption_count = random.choice(['Y', 'N'])
del_flag = random.randint(0, 1)
tenant_id = random.randint(0, 1)
create_by = random.randint(0, 9)
create_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
update_by = random.randint(0, 9)
update_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
workspace_code = ''.join(random.choices('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', k=5))
unit = random.choice(['立方米'])
insert_query = f"INSERT INTO device_water (id, device_water_id, data_group, water_code, water_name, water_type_code, process_code, flowmeter_code, is_total_consumption_count, del_flag, tenant_id, create_by, create_time, update_by, update_time, workspace_code, unit) VALUES ({id}, {device_water_id}, '{data_group}', '{water_code}', '{water_name}', '{water_type_code}', '{process_code}', '{flowmeter_code}', '{is_total_consumption_count}', {del_flag}, {tenant_id}, {create_by}, '{create_time}', {update_by}, '{update_time}', '{workspace_code}', '{unit}')"
cur.execute(insert_query)
conn.commit()
print(insert_query)
# 插入20条数据
for _ in range(20):
insert_data()
# 关闭游标和数据库连接
cur.close()
conn.close()
上述代码完成后运行结果如下图所示,实现了向device_water插入20条数据,具体多少条数据可以更改。
行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 759968159,里面有各种测试开发资料和技术可以一起交流哦。
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。