暂无图片
暂无图片
2
暂无图片
暂无图片
1
暂无图片

使用datafaker给Oracle造点测试数据

原创 张玉龙 2022-05-12
2388

资料

https://github.com/gangly/datafaker

安装 python 3

yum install python3 -y rm -f /usr/bin/python ln -s /usr/bin/python3 /usr/bin/python sed -i "s:\<python\>:python2:g" /usr/bin/yum sed -i "s:\<python\>:python2:g" /usr/libexec/urlgrabber-ext-down
复制

安装 datafaker

pip3 install datafaker -i https://mirrors.aliyun.com/pypi/simple/
复制

安装 cx-Oracle

pip3 install cx-Oracle -i https://mirrors.aliyun.com/pypi/simple/
复制

创建测试用户和测试表

create tablespace test datafile '/u01/app/oracle/oradata/ORCLT/test02.dbf' size 1024M; create user test identified by test default tablespace test; grant connect,resource to test; grant unlimited tablespace to test; drop table test.stu purge; create table test.stu ( id NUMBER primary key, name varchar2(20) not null, school varchar2(20) not null, nickname varchar2(20) not null, age NUMBER not null, class_num NUMBER not null, score NUMBER(4,2) not null, phone NUMBER not null, email varchar2(64), ip varchar2(32), address CLOB );
复制

编写元数据 meta.txt

编写文件

[oracle@ora11g ~]$ vi meta.txt id||int||[:inc(id,1)] name||varchar(20)||[:name] 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)||[:ipv4] address||text||[:address]
复制

meta.txt 文件中每行数据为元数据的一个字段描述,以 || 分割为三列,使用 # 注释。

  • 第一列:字段名
  • 第二列:表字段类型,不是使用 Oracle 的字段类型。
  • 第三列:字段注释,其中包含构造规则标识

其中 school 列 [:enum(file://names.txt)] 表示从本地文件 names.txt 中读取枚举数据,表示学校名称只能从下面这5所学校中随机产生。names.txt 内容如下:

[oracle@ora11g ~]$ vi names.txt 清华中学 人和中心 广东中学 猪场 旧大院
复制

注意:meta.txt 和 names.txt 需要放在同一个目录下,再运行 datafaker 命令。

数据的构造规则

https://github.com/gangly/datafaker/blob/master/doc/ConstructionRule.md

使用 datafaker 构造数据

从本地文件 meta.txt 中读取元数据,以两个逗号分隔符构造 10 条数据,打印在屏幕上

[oracle@ora11g ~]$ datafaker rdb oracle://test:test@192.168.0.51:1521/orclt stu 10 --outprint --meta meta.txt --outspliter ,, 1,,陆秀兰,,广东中学,,鬼泣,,2,,95,,66.99,,13973233532,,pye@yahoo.com,,四川省昆明县龙潭张家港街g座 319391 2,,刘杨,,清华中学,,高小王子,,39,,51,,41.5,,18945845045,,jiangli@wr.com,,河南省贵阳县沙湾澳门路p座 737838 3,,葛斌,,猪场,,逗比,,89,,14,,81.58,,15975857272,,czheng@gmail.com,,青海省瑞市徐汇阜新街w座 394727 4,,李平,,旧大院,,鬼泣,,27,,93,,26.6,,18928744698,,bwang@hotmail.com,,山西省天津县普陀太原街U座 799243 5,,邓敏,,旧大院,,高小王子,,9,,18,,41.1,,15299201966,,ishen@gmail.com,,广西壮族自治区汕尾市东城辽阳路E座 249984 6,,王瑜,,清华中学,,鬼泣,,60,,20,,47.46,,18216153772,,nxiao@22.cn,,江苏省齐齐哈尔县丰都深圳街E座 823477 7,,李秀梅,,旧大院,,歌神,,81,,45,,95.95,,15297997894,,junzou@mingqiang.net,,广东省春梅县西夏陈街s座 976877 8,,齐旭,,旧大院,,歌神,,94,,19,,72.49,,15387397529,,zhuping@jun.net,,重庆市银川县房山沈阳路a座 750125 9,,张杨,,猪场,,逗比,,47,,83,,76.72,,18680870954,,longqiang@yahoo.com,,青海省海门县牧野杨路z座 257587 10,,张娜,,猪场,,逗比,,24,,42,,53.83,,13793571085,,yetao@qiangyan.org,,西藏自治区超县涪城荆门街v座 672405 time used: 0.126 s
复制

将构造的数据写入到 Oracle 数据库中

[oracle@ora11g ~]$ datafaker rdb oracle://test:test@192.168.0.51:1521/orclt stu 10 --meta meta.txt insert 10 records time used: 0.470 s
复制
  • 若要再次运行,需要修改 meta.txt 文件中为 id[:inc(id,11)] 起始值为11或更大值,不然数据库会报主键重复错误。
  • 验证数据
    image.png
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

墨天轮福利君
暂无图片
2年前
评论
暂无图片 0
您好,您的文章已入选墨力原创作者计划合格奖,10墨值奖励已经到账请查收! ❤️我们还会实时派发您的流量收益。
2年前
暂无图片 点赞
评论