MySQL 从零开始:08 番外:随机生成数据库数据

1、网页版:Generatedata1.1 预览1.2 功能介绍1.2.1 自定义数据集名称1.2.2 选择城市1.2.3 数据集1.2.4 导出类型1.2.5 导出记录数量1.2.6 导入 MySQL2、客户端:spawner2.1 预览2.2 功能介绍2.2.1 数据集2.2.2 输出格式2.2.3 导入数据库3.代码生成:pydbgen3.1 安装3.2 使用方法

学习数据库时,难免需要一些数据进行实验,对于小数据量的数据来说,我们自己想一些数据并插入到数据库即可,但是如果需要大量的数据时,手动输入将是一项繁琐的工作,我们也不一定能编那么多数据。基于以上,自动生成数据库数据成为了一项很重要的需求。

通过在网上搜集资料,我选择了几款可以自动生成大量随机数据库数据的工具。

1、网页版:Generatedata

Generatedata是一个免费、开放源码的脚本,主要由javascript , PHP和MySQL构成,它可以让您可以迅速生成大量各种格式的客户数据,用于测试软件,把数据输入数据库等。

  • 工具网址:http://www.generatedata.com
  • github地址:https://github.com/benkeen/generatedata
  • 官方文档: http://benkeen.github.io/generatedata/

1.1 预览

generatedata 是一款在线工具,它是这样的:

generatedata

界面看着很清爽,各功能区域一目了然。如果觉得英语不好看明白,可以右上角切换成中文:

generatedata中文界面

通过查看“新闻”栏,该项目代码在今年11月18日还进行了更新。

1.2 功能介绍

1.2.1 自定义数据集名称

最上方一栏可以填入数据集名称,但该功能是注册用户才可以使用的功能。如何成为注册用户呢?如下图所示,捐赠20美元可以获得一个账号,可以在线保存数据,而且可以突破每次生成100条记录的限制。

捐助

当然,对于不经常使用的人来说,这不是必要的。

1.2.2 选择城市

因为生成的随机数据包含了姓名、国家、邮编等等,所以要选择一个国家,生成的数据会根据选择的国家进行调整:

城市

1.2.3 数据集

数据类型有:人类相关数据(包含姓名、国家、手机号、邮箱等)、地理相关数据(包括街道地址、城市、邮编等)、信用卡数据、数值数据、数学数据以及其他。

挑几个常用的说明一下:

数据库中自增的 ID 可以在该网址生成,不仅可以定义起始值、步长还能定义正负数,甚至还可以将数字与字符串组合成一个字段:

自增列

人名也是经常用到的,可以对生成的姓名进行多种约束:男、女、姓、名等:

姓名

如果想生成班级同学的成绩数据,需要用到 数值范围 即生成指定数值之间的数据:

数值范围

还有很多数据类型,有需要的自行查看。如果字段不够了,可以在表格下方增加需要的行数。还有很好的一点是:可以用鼠标拖动各行进行排序。

1.2.4 导出类型

可供选择的导出格式有:CSV、Excel、HTML、JSON、LDIF、SQL、XML。 SQL 是我们关注的重点。

  • 可以定义表名称。
  • 选择数据库格式:MySQL、SQLite、Postgres、Oracle、SQL Server。
  • 可以生成创建表的语句、删除表的语句。
  • 选择批量插入的条数,即每一条 INSERT 语句插入数据的条数。
  • 选择是否添加 Primary Key 列。

选择完了导出类型,还可以选择是在页面中显示还是以文件的形式下载。

1.2.5 导出记录数量

我们选择自动生成数据的意图之一是想要大量的数据,该网址虽然也提供了选择生成记录数量的功能(页面左下角),但是那是为注册用户提供的,而且最多是5000条,而作为普通用户,每次只能生成100条记录,这并不能满足我们的需求。

如果我们点击左下角编辑框,会弹出警告:

警告

===== 华丽的分割线 ====

接下来要交给大家如何解除生成记录数据的限制(以 Chrome 为例)。

首先按 "F12" 调出开发者工具,然后按图示步骤找出左下角编辑框在 HTML 中的位置:

突破限制

找到了100然后双击进入编辑状态,将该值改为 10000 ,然后可以看到页面左下角由 100 变为 10000 了:

改成10000

那么它会起作用吗?我们拭目以待,点击右下角 “生成” 按钮,由于我选择的是以文件方式生成,会生成一个名为“dataNov-21-2018.sql”的文件。我们打开它看一下:

10000条记录

可以看到,一共生成了10000条记录,正是我们所需要的。记录数量竟然超过了官方规定的注册用户的最高限制。此处应该有掌声

==== 华丽的结尾 ====

1.2.6 导入 MySQL

光生成数据库还不算完,最终导入到 MySQL 中才能为我们所用。前面已经介绍过 MySQL 的官方工具“MySQL Workbench”,打开它并连接数据库。

点击"File"->"Open SQL Script",选择刚才下载的 dataNov-21-2018.sql 文件:

打开SQL文件

由于该 SQL 脚本并没有指定使用哪个数据库,所以,在打开的 SQL 窗口前面要加上一句" USE `mysql_learn`; "(mysql_learn可以为其他你现存的任一数据库名称)。

执行

添加完该语句后,点击类似于闪电的图标执行所有SQL语句。等所有语句执行完进行验证,在Query 窗口输入指令:"select * from mysql_learn.uscity; " 然后执行,看是否为 10000条记录。

验证插入结果

从图中可以看到所有10000条数据都已插入到 MySQL 中,大功告成。

2、客户端:spawner

Spawner 是一个样品/测试数据的数据库生成器。它可以配置为输出指定的文本或SQL插入声明。它也可以直接插入到一个MySQL 5.x的数据库。包括许多字段类型,其中大部分是可配置的。

  • 下载地址:https://sourceforge.net/projects/spawner/

2.1 预览

其界面如下,主要由三个 TAB 页组成:字段定义、输出定义和日志信息。

spawner

2.2 功能介绍

该客户端和 Generatedata 的大部分功能重叠,只有少数差异化功能。

2.2.1 数据集

支持的数据类型也不少:数值类型、人类相关数据、时间、文本、集合、网络,也涵盖了日常需要的数据类型。

spawner数据格式

各种数据类型不再赘述,请自行查阅。为了插入同一个数据库,分别创建如下四个字段:

2.2.2 输出格式

注意:该客户端不限制生成记录的条数

输出格式有四种:Delimited、Fixed Width、SQL、MySQL Database。

  • Delimited 就是将各字段以指定分隔符进行分隔,如果指定分隔符为逗号,并勾选“Include field names as first row of delimited output”,我们将得到一个 CSV 格式的数据:

delimited

生成的数据:

csv数据

  • SQL 格式可以指定表名称、每条 INSERT 语句插入的记录条数、操作类型等。
  • MySQL Database 输出就比较有意思了,它是直接连接 MySQL 数据库将生成的数据直接插入。但是该功能一致报错,如图所示:

spawner插入mysql报错

我尝试将 MySQL 安装目录下的 “libmysql.dll” 放到该 exe 的目录或者 "C:/Windows/SysWOW64" 目录都无效,所以我选择放弃,如果你有办法解决,欢迎留言。

2.2.3 导入数据库

使用 1.2.6 中的方法将生成的 "datagen.sql" 文件导入并执行,最后查看表中的记录:

20000条数据

正好 20000 条数据,说明数据插入成功。

3.代码生成:pydbgen

pydbgen 是一个轻量的纯 Python 库,它可以生成包括姓名、地址、信用卡号、日期、时间、公司名称等数据,存放在 Pandas Dataframe 对象中,并可以保存到 SQLite 数据库或 Excel 文件。

  • github 地址:https://github.com/tirthajyoti/pydbgen

3.1 安装

假定电脑上已经安装了 Python,只需要执行如下命令进行安装:

pip install pydbgen

在 Python 3.6版本安装成功。

3.2 使用方法

当前 1.0.0 版本主要有以下几个主要方法:

  • gen_data_series()
  • gen_dataframe()
  • gen_table()
  • gen_excel() gen_table() 接口会使用 Python 内置的 SQLite 引擎生成一个 ".db" 后缀的数据库,用户可以选择多种数据类型当做数据表的列名,SQLite 表中的所有的数据类型都是 VARCHAR 类型。如下类型可用:
  • Name, country, city, real (US) cities, US state, zipcode, latitude, longitude
  • Month, weekday, year, time, date
  • Personal email, official email, SSN
  • Company, Job title, phone number, license plate

使用示例:

from pydbgen import pydbgen

myDB = pydbgen.pydb()
myDB.gen_table(200, db_file="TestDB.db",table_name="People", fields=["name",'phone','city'])

执行完成后,会生成一个 TestDB.db 文件,使用 Navicat for SQLite 打开该数据库文件:

打开db文件

点击 "File"->"Export" 可以将db文件导出为 SQL 脚本,然后使用前面提到的方法将 SQL 文件导入到 MySQL 数据库中。

由于 pydbgen 支持的数据类型不是很多,根据需求选择是否需要使用它,期待它的发展。

本文介绍了三种生成 随机数据库数据的工具,希望能帮助大家更加顺利的学习 MySQL。如果您有其他好的数据生成工具,也欢迎留言和大家分享!

原文发布于微信公众号 - C与Python实战(CPythonPractice)

原文发表时间:2018-11-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏智能大石头

2,ORM组件XCode(速览)

    啥也不说,上图: image.png     这是最基本的增删改查代码!     符合X系列组件的一贯作风,不求万能,只求简单实用!    ...

19890
来自专栏编程

Spark之搜狗日志查询实战

1、下载搜狗日志文件: 地址:http://www.sogou.com/labs/resource/chkreg.php 2、利用WinSCP等工具将文件上传至...

293100
来自专栏软件测试经验与教训

一个比较实用的测试方法

48060
来自专栏程序员叨叨叨

compileSdkVersion 'android-24' requires JDK 1.8 or later to compile

今天,好久没有写Android程序的我突发奇想,想简单写一个每日任务APP。好的!新建工程->写好代码框架->开启模拟器->运行!哎哎哎?!那啥!咋报错了嘞?!...

13340
来自专栏大内老A

谈谈基于Kerberos的Windows Network Authentication[上篇]

Content: 基本原理 引入Key Distribution: KServer-Client从何而来 引入Authenticator : 为有效的证明自己提...

21860
来自专栏数据和云

当SQL Server爱上Linux:AVAILABILITY_MODE 和 DataGuard 的实践差距

作者 | 张乐奕:Oracle ACE 总监,ACOUG (中国 Oracle 用户组)联合发起人。Oracle 数据库高可用解决方案与 Exadata 一体...

10820
来自专栏芋道源码1024

75 道 BAJT 高级 Java 面试题,你能答上几道?

希望大家在每天闲暇之余学习其中几道题目,日积月累,去 BAJT 面试时,一切都水到渠成。

24930
来自专栏运维

ELK分析ngx_lua_waf软件防火墙日志

https://github.com/loveshell/ngx_lua_waf

34110
来自专栏Ryan Miao

CentOS(linux)安装PostgreSQL

PostgreSQL是一个功能强大的开源数据库系统。经过长达15年以上的积极开发和不断改进,PostgreSQL已在可靠性、稳定性、数据一致性等获得了业内极高的...

23020
来自专栏企鹅号快讯

JDBC编程

前面我们已经讨论了数据库的安装和简单的使用,还没完成的可以先去Mysql的安装和Mysql数据库的简单操作回顾一下哦!今天我们来简单学习JDBC编程的准备和链...

35680

扫码关注云+社区

领取腾讯云代金券