使用Python为MySQL生成测试数据出于测试目的,特别是如果您正在处理一个使用任何数据库技术来存储信息的项目,您可能需要数据来测试您的项目。在这种情况下,您有两个选择:

  • 找一个好的数据集(Kaggle)或者,
  • 使用像Faker这样的库

通过这篇博文,你将学习如何使用Faker为MySQL生成测试数据。

需求

依赖关系

在创建为项目生成数据的Python脚本之前,请确保安装了所有依赖项。

你可以创建一个包含以下内容的文件:

创建完这个文件后,运行以下命令:

或者如果你正在使用Anaconda,创建一个environment.yml文件:

您可以更改Python版本,因为该脚本已被证明可以使用以下版本的Python: 3.7、3.8、3.9、3.10和3.11。

运行如下语句配置项目环境:

数据库

既然已经安装了依赖项,就必须创建一个名为公司

登录MySQL:

或者使用MySQL Shell登录MySQL:

取代输入您的用户名,如有必要,并替换本地主机如果需要,使用MySQL服务器实例的IP地址或URL。

如果使用MySQL Shell,请切换到SQL模式:

然后创建公司数据库

用Faker伪造数据

骗子是一个Python库,可用于通过包中定义的属性生成假数据。

上面的代码将在每次调用方法时打印10个名称名称(),它将产生一个随机值。的名称()是生成器的一个属性。这个库的每个属性都称为a假的。其中有很多是包装在供应商

Faker库中可用的一些提供程序和属性包括:

你可以找到更多的信息捆绑社区文档中的提供者。

创建一个Pandas数据框架

在了解了Faker及其性质后模块目录需要被创建,在目录中,我们将创建一个名为dataframe.py。稍后将把该模块导入到主脚本中,并在这里定义将生成数据的方法。

实现多处理是为了优化脚本的执行时间,但稍后将对此进行解释。首先,您需要导入所需的库:

  • 熊猫。使用Faker生成的数据将在导入数据库之前存储在Pandas DataFrame中。
  • tqdm ()。需要添加进度条来显示DataFrame创建的进度。
  • 骗子()。这是伪造库里的发生器。
  • cpu_count ()。的方法多处理模块,该模块将返回可用内核的数量。

骗子()创建并初始化faker生成器,该生成器可以通过访问属性生成数据。

num_cores变量是否存储调用后返回的值cpu_count ()方法。

然后我们定义create_dataframe ()函数,地点:

  • x是一个变量,它将决定创建DataFrame的for循环的迭代次数。
  • 数据是一个空的DataFrame,稍后将使用Faker生成的数据来实现。
  • 熊猫DataFrame.loc属性提供了对一组行和列的标签访问。在每次迭代中,一行数据被添加到DataFrame中,该属性允许为每一列赋值。

调用此函数后创建的DataFrame将包含以下列:

连接到数据库

在插入之前由Faker生成的数据之前,我们需要建立到数据库的连接,为此将使用SQLAlchemy库。

SQLAlchemy是Python SQL工具包和对象关系映射器,它为应用程序开发人员提供了SQL的全部功能和灵活性。

从SQLAlchemy中导入create_engine ()以及sessionmaker()方法。第一个用于连接到数据库,第二个用于创建到引擎对象的会话绑定。

别忘了更换用户密码,本地主机使用您的身份验证详细信息,将此代码保存在模块目录并命名base.py。

文档, SQLAlchemy使用mysqlclient库,但也有其他可用的,包括PyMySQL

维修工说的两种mysqlclientPyMySQL, mysqlclient-python比PyMySQL快得多,但如果:

  • 由于某些原因,你不能使用libmysqlclient
  • 你想使用monkeypatched socket的gevent或eventlet
  • 你想破解mysql协议

数据库模式定义

方法创建数据库的模式模式定义语言由SQLAlchemy提供,但因为我们只创建一个表并通过调用Pandas导入DataFrameto_sql ()方法,这是不必要的。

在调用to_sql()方法时,我们按照如下方式指定模式:

然后我们通过模式变量作为此方法的参数。

将此代码保存在模块目录名称为schema.py

什么是多处理?

多处理是一个Python模块,可用于利用运行脚本的计算机中可用的CPU内核。在Python中,单cpu使用是由全局解释器锁,它只允许一个线程在任何给定时间携带Python解释器,有关更多信息,请参阅这篇博文

假设您正在生成60,000条记录,那么在单个核心中运行脚本将花费比预期更多的时间,因为每个记录都是在循环中逐一生成的。通过实现多处理,整个过程除以核心数量,因此如果您的CPU有16个核心,每个核心将生成4,000条记录,这是因为只有15个核心将被使用,因为我们需要留下一个可用以避免计算机冻结。

为了更好地理解如何在Python中实现多处理,我推荐以下教程:

生成数据

现在,所有必需的模块都准备好了,可以导入到主脚本中sql.py脚本。首先,导入所需的库:

从多处理,池()cpu_count ()是必需的。的Python多处理池类允许您在Python中创建和管理进程池。

然后,导入之前创建的模块:

现在我们创建多处理池,配置为使用所有可用的CPU内核减去一个。每个核心都会调用create_dataframe ()函数并创建一个包含4,000条记录的DataFrame,并且在对该函数的每次调用完成后,创建的所有DataFrame将被连接到一个DataFrame中。

最后,我们将通过调用to_sql将DataFrame插入MySQL()方法。所有的数据将存储在一个名为员工

通过调用conn.execute (),新列命名为id将添加到表中,设置为主键,并放在开头。

运行以下语句填充表:

使用多处理创建数据框

使用多处理创建数据框

生成包含60,000条记录的DataFrame只需要几秒钟的时间,这就是实现多处理的原因。

PMM上的CPU利用率

Percona监控和管理的CPU利用率雷竞技下载官网raybet雷竞技竞猜在线官网

脚本完成后,您可以检查数据库中的数据。

函数的作用是:返回数组中记录的个数员工表格

这篇博文中显示的代码可以在我的GitHub帐户中找到数据生成器存储库。

订阅
通知的
客人

1评论
最古老的
最新的 大多数投票
内联反馈
查看所有注释

很好的例子,还有一些不错的技巧可以使用。在这种情况下,如何配置执行池以并行处理以模拟并发操作和测试数据库隔离级别?