我想在mysql中生成测试数据
假设有这样的表,
create table person (
id int auto_increment primary key,
name text,
age int,
birth_day date
);
让我知道如何以简单的方式创建测试数据。
BTW我知道使用stdin的一些方法
repeat 5 echo 'insert into person (name, age, birth_day) select concat("user", ceil(rand() * 100)), floor(rand()*100), date_add(date("1900/01/01"), interval floor(rand()*100) year);'
或
repeat 5 perl -M"Data::Random qw(:all)" -E 'say sprintf qq#insert into person (name, age, birth_day) values ("user%s", %s,"%s");#, (int rand(100)), (int rand(100)), rand_date(min => "1900-01-01", max=>"1999-12-31")'
我认为后者可能更好,因为它不使用mysql函数。
答案 0 :(得分:2)
这是为mysql生成虚拟数据的最简单的数据库;
和这里;
https://dba.stackexchange.com/questions/449/tool-to-generate-large-datasets-of-test-data
编辑:dummydata.me不起作用,我找到了另一种工作方式:)答案 1 :(得分:0)
您可以尝试http://paulthedutchman.nl/datagenerator-online。也可以作为脱机版本使用,以在本地开发环境上使用。与其他数据生成器相比,它具有更多选择。 不适合移动设备,因为它使用ExtJS,请在计算机上使用它。
脱机版本会自动扫描您的数据库和表结构。
答案 2 :(得分:0)
作为系统管理员,我使用允许生成动态数据的库 Faker。
对于您的数据库 person
,您可以执行以下操作
#!/usr/bin/env python
import random
import mysql.connector
from mysql.connector import Error
from faker import Faker
Faker.seed(33422)
fake = Faker()
conn = mysql.connector.connect(host=db_host, database=db_name,
user=db_user, password=db_pass)
cursor = conn.cursor()
row = [fake.first_name(), random.randint(0,99), fake.date_of_birth()]
cursor.execute(' \
INSERT INTO `person` (name, age, birth_day) \
VALUES ("%s", %d, "%s",);' % (row[0], row[1], row[2])
conn.commit()
然后您可以通过循环来改进脚本,并且在每次迭代时 faker
将创建随机 name
和 birth_date
。
Faker 有一个它可以生成的数据类型(称为“提供者”)的扩展列表,完整列表可在 https://faker.readthedocs.io/en/master/providers.html 获得。