使用 Python 批量入库测试用户数据

65 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第14天,点击查看活动详情

前言

目前手头上有个项目,要生成一些数据给客户看,如用户名、身份证号、邮箱、性别等等,但是实打实的用户数据录入也需要一段时间,时间不等人。偶然间看到 Python 里面有一个模块可以搞定我的问题,开始尝试。

基础用法

此模块的 github 地址: github.com/joke2k/fake…

安装模块:

pip install Faker

如果你的 pip 安装报错,建议网络搜索下错误,就此不做解释

使用 faker.Faker() 创建和初始化一个 faker 生成器,它可以通过访问以您想要的数据类型命名的属性来生成数据。

先来浅浅试一下:

main.py

# 导入 Faker 模块
from faker import Faker

if __name__ == '__main__':
    # 创建 faker 创造器
    fake = Faker()
    # 指定地区,不然会生成英文名或国外地址等
    faker_cn = Faker(locale='zh_CN')
    print(faker_cn.name())

输出:

李琳

测试输出一个地址

print(faker_cn.address())
--输出--
上海市东莞县西夏大冶路c座 736941
方法作用
address()获取一个随机的地址
administrative_unit()获取一个随机的省份
city()获取一个随机的市或县
postcode()获取一个随机的邮政编码
company()获取一个随机的公司名
date()获取一个随机的日期
ascii_free_email()获取一个随机的邮箱
hostname()获取一个随机的网址
ipv4()获取一个随机的 ip 地址

使用 Python 链接数据库并插入数据

本文数据库使用的是MySQL,数据库名字为 springboot,建 user_info 表的语句如下:

DROP TABLE IF EXISTS `user_info`;
CREATE TABLE `user_info` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `full_name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `address` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `card_no` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `email` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `sex` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `in_time` datetime(6) DEFAULT NULL,
  `is_member` bit(1) DEFAULT NULL,
  `password` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `remark` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=200 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

编写代码如下,注释都在其中:

from faker import Faker

'''
连接MySQL数据库
'''
import pymysql

if __name__ == '__main__':
    fake = Faker()
    # 指定生成特定地域的数据
    faker_cn = Faker(locale='zh_CN')
    # 创建数据库链接
    db = pymysql.connect(host="127.0.0.1", port=3306,
                         user='root',
                         passwd='root',
                         db='springboot',
                         charset='utf8')
    # 使用cursor()方法创建一个游标对象cursor
    cursor = db.cursor()
    # SQL 插入语句
    sql = """INSERT INTO user_info(username,address, card_no, full_name,
                email, sex,`password`,remark)
             VALUES (%s, %s, %s, %s, %s,%s,%s,%s)"""
    val = []
    for i in range(1, 100):
        # 生成测试用户名
        username = faker_cn.user_name()
        # 生成测试地址
        address = faker_cn.address()
        # 生成身份证号
        ssn = faker_cn.ssn()
        name = ""
        sex = ""
        if i % 2 == 0:
            name = faker_cn.name_female()
            sex = "女"
        else:
            name = faker_cn.name_male()
            sex = "男"
        # 生成测试邮箱
        email = faker_cn.safe_email()
        # 生成测试密码
        passwd = faker_cn.password()
        val.append((username, address, ssn, name, email, sex, passwd, ""))
    # 使用execute()方法执行SQL查询
    cursor.executemany(sql, val)
    # 提交到数据库执行
    db.commit()
    # 关闭数据库连接
    db.close()

查看测试数据

使用命令语句进入数据库:

mysql -uroot -proot

-u 后跟的是用户名

-p 后跟的是密码

进入数据库:

mysql> use springboot;
mysql> select address,card_no,full_name,email,sex from user_info limit 110,10;

输出:

image.png