python批量造测试数据存入mysql

 最近测试同事要造100万用户数据,搞了好长时间,头发都揪掉了,我听到后赶紧写个自动生成测试数据来给她解决问题,大家有需要也可以改改使用。

下面的内容都是可以直接copy使用,只需要修改一下mysql连接信息,就可以了。

1. mysql建表

首先我们先用mysql建个test数据库,然后用下面的建表语句建表:

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `user_id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `dept_id` bigint DEFAULT NULL COMMENT '部门ID',
  `user_name` varchar(30) NOT NULL COMMENT '用户账号',
  `nick_name` varchar(30) NOT NULL COMMENT '用户昵称',
  `user_type` varchar(2) DEFAULT '00' COMMENT '用户类型(00系统用户)',
  `email` varchar(50) DEFAULT '' COMMENT '用户邮箱',
  `phonenumber` varchar(11) DEFAULT '' COMMENT '手机号码',
  `sex` char(1) DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)',
  `avatar` varchar(100) DEFAULT '' COMMENT '头像地址',
  `password` varchar(100) DEFAULT '' COMMENT '密码',
  `status` char(1) DEFAULT '0' COMMENT '帐号状态(0正常 1停用)',
  `del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
  `login_ip` varchar(128) DEFAULT '' COMMENT '最后登录IP',
  `login_date` datetime DEFAULT NULL COMMENT '最后登录时间',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=200 DEFAULT CHARSET=utf8mb3 COMMENT='用户信息表';

2. 批量生成数据,存入user表

2.1 安装faker和pymysql依赖包

# 用来生成测试数据
pip install faker
# 用来操作数据库
pip install pymysql

2.2 批量生成数据,落表

# coding: utf-8
# 批量生成测试数据,并保存到mysql
from faker import Faker
import pymysql
def create_test_datas():
    # 创建一个faker对象
    fake = Faker('zh_CN')
    try:
        # 创建一个数据库连接
        conn = pymysql.connect(host='127.0.0.1', user='root', password='Root1234', db='test', charset='utf8')
        print('连接mysql成功')
        # 创建一个游标
        cursor = conn.cursor()
        # 创建一个sql语句
        sql = "INSERT INTO `user` (`dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (%s, %s, %s, %s, %s, %s, '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', '2022-01-30 12:55:06', 'admin', '2022-01-30 12:35:45', '', '2022-01-30 12:55:06', '管理员');"  # 创建一个sql语句
        # 循环生成数据
        for i in range(1, 1000):
            for j in range(1000):
                # 生成数据
                dept_id = fake.random_int(min=1, max=100)
                name = fake.name()
                nick_name = fake.name()
                user_type = fake.random_int(min=1, max=2)
                email = fake.email()
                phonenumber = fake.phone_number()
                # 执行sql语句
                cursor.execute(sql, (dept_id,name,nick_name,user_type,email,phonenumber))
            # 提交事务
            conn.commit()
            print('{}条数据插入成功'.format(i*1000))
        # 关闭游标
        cursor.close()
        # 关闭连接
        conn.close()
        print('关闭数据库连接')
    except Exception as e:
        print(e)

if __name__ == '__main__':
    create_test_datas()

效果如下,我们可以看到生成的数据都和真实的数据很像,很时候用来做测试数据,或者性能测试的铺底数据:

 

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值