背景
在进行编码自测的时候经常会涉及到数据库造数。当表字段很多时候,手工造数就比较麻烦,可以考虑使用工具进行造数。
造数工具还是比较多的,目前试用了下,使用基于python开源的datafaker还是比较方便的。
使用说明
以mysql为例
安装datafaker
1
pip install datafaker
安装mysql包
1
pip install mysqlclient
使用mysql命令获取表结构参数
1
show full columns from tablename
将结果中的Field、Type、Comment列获取放在excel里
构造meta.txt文件
datafaker造数主要通过meta文件进行规则配置,官方的例子如下:
1
2
3
4
5
6
7
8
9
10
11id||int||自增id[:inc(id,1)]
name||varchar(20)||学生名字
school||varchar(20)||学校名字[:enum(file://names.txt)]
nickname||varchar(20)||学生小名[:enum(鬼泣, 高小王子, 歌神, 逗比)]
age||int||学生年龄[:age]
class_num||int||班级人数[:int(10, 100)]
score||decimal(4,2)||成绩[:decimal(4,2,1)]
phone||bigint||电话号码[:phone_number]
email||varchar(64)||家庭网络邮箱[:email]
ip||varchar(32)||IP地址[:ipv4]
address||text||家庭地址[:address]即前面获取的三列信息,通过
||
分割,如果有特殊规则,则在Comment后增加规则,详细规则可参考:https://github.com/gangly/datafaker/blob/master/doc/数据构造规则.md
屏幕打印造数命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15datafaker rdb mysql+mysqldb://root:root@localhost:3600/test?charset=utf8 stu 10 --outprint --meta meta.txt --outspliter ',,'
1,,鲍红,,人和中心,,高小王子,,3,,81,,55.6,,13197453222,,mwei@gmail.com,,192.100.224.255,,江苏省西宁市梁平朱路I座 944204
2,,刘东,,清华中学,,高小王子,,3,,31,,52.4,,15206198472,,lili@kong.cn,,203.0.190.6,,内蒙古自治区嘉禾市兴山呼和浩特街E座 706421
3,,匡静,,人和中心,,歌神,,9,,84,,72.51,,18944398099,,zouchao@gmail.com,,203.1.53.166,,安徽省永安市沈河惠州街x座 345415
4,,王宇,,猪场,,逗比,,6,,89,,19.3,,18628114285,,na58@cai.net,,169.4.126.215,,山西省梧州县朝阳何路y座 846430
5,,陆桂芝,,猪场,,逗比,,8,,99,,92.22,,13304570255,,na55@ti.cn,,168.136.127.200,,江苏省英县徐汇尹街C座 908240
6,,顾阳,,猪场,,歌神,,9,,32,,43.14,,18025578420,,linping@pr.net,,174.50.222.39,,黑龍江省惠州县梁平大冶街Z座 611736
7,,杨洁,,人和中心,,鬼泣,,6,,35,,81.25,,13654306263,,minzhong@xiaxia.cn,,100.57.79.2,,湖北省琳市沙湾汪街V座 544660
8,,申璐,,人和中心,,鬼泣,,6,,14,,73.61,,13866020503,,changxiulan@chaoxia.cn,,198.248.254.56,,陕西省合山县东丽宁德街Q座 810017
9,,申强,,广东中学,,逗比,,7,,48,,90.65,,13915915013,,ysun@chao.cn,,169.210.122.39,,甘肃省冬梅县城北六安街Z座 619755
10,,李丹丹,,旧大院,,鬼泣,,3,,67,,87.63,,18899812516,,xiulanmo@qin.cn,,192.52.218.133,,湖南省宜都县萧山澳门街E座 791911
generated records : 10
printed records : 10
time used: 0.458 s写入mysql造数命令
1
datafaker rdb mysql+mysqldb://root:root@localhost:3600/test?charset=utf8 stu 10 --meta meta.txt
注意
当类型是int(11)这种情况时,目前版本是会报错的:
1
ValueError: empty range for randrange() (11,1, -10)
目前是可通过在meta.txt对应的行中,在comment中注明规则,如:
1
class_num||int||班级人数[:int(10, 100)]
目前也提交对issue待解决。
当使用
date_between
造数时,当时间范围超过当前日期时会报错。更多可参考官方github:https://github.com/gangly/datafaker