出于测试目的,特别是如果您正在处理一个使用数据库技术存储信息的项目,那么您可能需要数据来测试您的项目。在这种情况下,你有两个选择:
通过这篇文章,您将学习如何使用Faker为MongoDB生成测试数据。
需求
依赖关系
在创建将为项目生成数据的Python脚本之前,请确保安装了所有依赖项。
您可以创建让文件内容如下:
|
1
2
3.
4
|
熊猫
pymongo
tqdm
骗子
|
一旦你创建了这个文件,运行以下命令:
|
1
|
皮普
安装
-r
需求
. txt
|
或者如果你使用Anaconda,创建一个environment.yml文件:
|
1
2
3.
4
5
6
7
|
名字: 雷竞技下载官网percona
依赖关系:
-python = 3。10
-熊猫
-pymongo
-tqdm
-骗子
|
您可以更改Python版本,因为该脚本已被证明适用于这些版本的Python: 3.7、3.8、3.9、3.10和3.11。
运行如下语句配置项目环境:
|
1
|
conda
env
创建
-f
环境
.yml
|
用Faker伪造数据
骗子是一个Python库,可用于通过包中定义的属性生成假数据。
|
1
2
3.
4
5
|
从
骗子
进口
骗子
假的
=
骗子
(
)
为
_
在
范围
(
10
)
:
打印
(
假的
。
名字
(
)
)
|
上面的代码将打印10个名称,并且在每次调用方法时名称()时,它将产生一个随机值。的名称()是生成器的属性。这个库的每个属性都称为a假的。里面有很多供应商。
Faker库中可用的一些提供者和属性包括:
- faker.providers.person
- 名字→John Doe
- first_name→凯瑟琳
- last_name→常
- faker.providers.address
- 地址→791克里斯特帕克斯,萨沙伯里,伊利诺伊州86039-9874
- 城市→Sashabury
- 国家→匈牙利
- faker.providers.job
- 工作→音乐家
- faker.providers.company
- 公司→Acme公司
- faker.providers.internet
创建Pandas数据框架
在了解了Faker及其特性后,a模块目录需要创建,在该目录中,我们将创建一个名为dataframe.py。这个模块稍后将被导入到我们的主脚本中,这里是我们定义生成数据的方法的地方。
|
1
2
3.
4
|
从
多处理
进口
cpu_count
进口
熊猫
作为
pd
从
tqdm
进口
tqdm
从
骗子
进口
骗子
|
实现多处理是为了优化脚本的执行时间,但这将在后面解释。首先,你需要导入所需的库:
- 熊猫。使用Faker生成的数据在导入数据库之前将存储在Pandas DataFrame中。
- tqdm ()。需要添加一个进度条来显示DataFrame创建的进度。
- 骗子()。这是伪造者库中的生成器。
- cpu_count ()。这是一个方法多处理模块,该模块将返回可用内核数。
|
1
2
|
假的
=
骗子
(
)
num_cores
=
cpu_count
(
)
-
1
|
骗子()创建并初始化一个faker生成器,该生成器可以通过访问属性生成数据。
num_cores是一个变量,用于存储调用cpu_count ()方法。
|
1
2
3.
4
5
6
7
8
9
10
11
12
13
|
def
create_dataframe
(
参数
)
:
x
=
int
(
60000/num_cores
)
数据
=
pd
。
DataFrame
(
)
为
我
在
tqdm
(
范围
(
x
)
,
desc=“创建DataFrame”
)
:
数据
。
疯狂的
(
我
,
“first_name”
]
=
假的
。
first_name
(
)
数据
。
疯狂的
(
我
,
“last_name”
]
=
假的
。
last_name
(
)
数据
。
疯狂的
(
我
,
“工作”
]
=
假的
。
工作
(
)
数据
。
疯狂的
(
我
,
“公司”
]
=
假的
。
公司
(
)
数据
。
疯狂的
(
我
,
“地址”
]
=
假的
。
地址
(
)
数据
。
疯狂的
(
我
,
“城市”
]
=
假的
。
城市
(
)
数据
。
疯狂的
(
我
,
“国家”
]
=
假的
。
国家
(
)
数据
。
疯狂的
(
我
,
“电子邮件”
]
=
假的
。
电子邮件
(
)
返回
数据
|
然后我们定义create_dataframe ()函数,地点:
- x是一个变量,它将决定创建DataFrame的for循环的迭代次数。
- 数据是一个空的DataFrame,稍后将用Faker生成的数据来实现。
- 熊猫DataFrame.loc属性通过标签提供对一组行和列的访问。在每次迭代中,一行数据被添加到DataFrame中,该属性允许为每一列赋值。
调用此函数后创建的DataFrame将有以下列:
|
1
2
3.
4
5
6
7
8
9
10
|
#列非空计数类型
---------
-------------------
0
first_name
60000
非-零
对象
1
last_name
60000
非-零
对象
2
工作
60000
非-零
对象
3.
公司
60000
非-零
对象
4
地址
60000
非-零
对象
5
国家
60000
非-零
对象
6
城市
60000
非-零
对象
7
电子邮件
60000
非-零
对象
|
连接到数据库
在插入之前用Faker生成的数据之前,我们需要建立一个到数据库的连接,为此需要使用PyMongo将使用库。
|
1
2
3.
4
|
从PyMongo导入MongoClient ()方法。
别忘了更换用户,密码,本地主机,港口(27017),并将此代码保存在模块目录并将其命名为base.py。
什么是多处理?
多处理是一个Python模块,可用于利用运行脚本的计算机中可用的CPU内核。在Python中,单cpu使用是由全局解释器锁,它只允许一个线程在任何给定的时间携带Python解释器,更多信息请参阅这篇博文。
假设您正在生成60,000条记录,在单个核心中运行脚本所花费的时间将超出您的预期,因为每个记录都是在循环中逐个生成的。通过实现多处理,整个过程除以核数,所以如果你的CPU有16个核,每个核将产生4000条记录,这是因为只有15个核将被使用,因为我们需要留下一个核来避免计算机冻结。
为了更好地理解如何在Python中实现多处理,我推荐以下教程:
生成数据
所需的所有模块现在都已准备好导入到主脚本中,因此是时候创建mongodb.py脚本。首先,导入所需的库:
|
1
2
3.
|
从
多处理
进口
池
从
多处理
进口
cpu_count
进口
熊猫
作为
pd
|
从多处理,池()和cpu_count ()是必需的。的Python多处理池类允许你在Python中创建和管理进程池。
然后,导入之前创建的模块:
|
1
2
|
从
模块
。
dataframe
进口
create_dataframe
从
模块
。
基地
进口
客户端
|
现在我们创建的多处理池配置为使用所有可用的CPU内核减去一个。每个核心将调用create_dataframe ()函数并创建一个包含4000条记录的DataFrame,并且在每次调用函数结束后,所有创建的DataFrame将被连接成一个单一的DataFrame。
|
1
2
3.
4
5
6
7
8
|
如果
__name__
==
“__main__”
:
num_cores
=
cpu_count
(
)
-
1
与
池
(
)
作为
池
:
数据
=
pd
。
concat
(
池
。
地图
(
create_dataframe
,
范围
(
num_cores
)
)
)
data_dict
=
数据
。
to_dict
(
“记录”
)
db
=
客户端
(
“公司”
]
集合
=
db
(
“员工”
]
集合
。
insert_many
(
data_dict
)
|
登录到MongoDB服务器后,我们得到数据库和数据将存储在其中的集合。
最后,我们将通过调用insert_many将DataFrame插入到MongoDB中()方法。所有数据将存储在一个名为员工。
运行以下语句填充数据库:
|
1
|
python
mongodb
. py
|
使用多处理创建数据帧
生成包含60,000条记录的DataFrame只需要几秒钟的时间,这就是实现多处理的原因。
Percona监控和管理中的CPU利用雷竞技下载官网率raybet雷竞技竞猜在线官网
脚本完成后,您可以检查数据库中的数据。
|
1
2
|
使用
公司
;
db
。
员工
。
数
(
)
|
函数的作用是:返回员工表格
|
1
|
60000
|
方法中显示记录员工表:
|
1
|
db
.employees
;
(
)
.pretty
(
)
|
|
1
2
3.
4
5
6
7
8
9
10
11
|
{
“_id”
:
ObjectId
(
“6363 ceeeda5c972cabf558b4”
)
,
“first_name”
:
“雪莉”
,
“last_name”
:
“菲尔普斯”
,
“工作”
:
“科普作家”
,
“公司”
:
“房子公司”
,
“地址”
:
地址:wy98585,梅贾街06298号,罗伯特兰套房742nRobertland
,
“城市”
:
“Thomasview”
,
“国家”
:
“科特迪瓦”
,
}
|
这篇博客文章中显示的代码可以在我的GitHub帐户上找到数据生成器存储库。

想要每周更新最新的博客文章?
现在订阅,我们将在每周五东部时间下午1点向您发送最新消息。
相关博客文章
推荐的文章
2023年4月14日
皮特•斯科特
如何降低金融服务中数据库管理的成本
2023年4月13日
Naveed谢赫
PostgreSQL中的复制延迟
2023年4月13日
金伯利威尔金斯
MongoDB V4.2 EOL即将到来:现在如何升级和注意陷阱!
最受欢迎文章
2023年1月17日
谢尔盖Pronin
使用Percona Advisors确保数据库安全雷竞技下载官网
2023年2月10日
马塞洛•阿尔特曼
雷竞技下载官网Percona XtraBackup现在支持IAM实例配置文件
2023年2月10日
拉蒂。乔杜里
雷竞技下载官网Percona XtraBackup和MySQL 5.7等待刷新表状态查询