利用Factory-boy来生成实例数据

库和版本:
Faker==2.0.0
factory-boy==2.12.0 官方文档:
https://factoryboy.readthedocs.io/en/latest/index.html
1. 新建两个object:User和School
user.py
class User():
def __init__(self, name, num, age, school, city, phone):
self.name, self.num, self.age, self.school, self.city, self.phone = \
name, num, age, school, city, phone
school.py
class School:
def __init__(self,schoolName):
self.schoolName=schoolName
2. 给对象创建factory
import factory
import factory.fuzzy
from demo_factory_boy.fbobject.user import User
from demo_factory_boy.fbobject.school import School
from demo_factory_boy.fbprivader.numpv import NumProvider factory.Faker.add_provider(NumProvider) #添加自定义的NumProvider class SchoolFactory(factory.Factory):
class Meta:
model = School schoolName = factory.sequence(lambda n: 'school%04d' % n)#factory.sequence class UserFactory(factory.Factory):
class Meta:
model = User name = factory.Faker("name", locale="zh_CN")#factory.Faker
num = factory.Faker("num")
age = factory.fuzzy.FuzzyInteger(42)#factory.fuzzy.FuzzyInteger
city = factory.Faker("address", locale="zh_CN")
phone = factory.fuzzy.FuzzyText("", 7, "", "")#factory.fuzzy.FuzzyText
school = factory.SubFactory(SchoolFactory)#factory.SubFactory class Params:
shipped = factory.Trait(
name=None
)
3.编写自定义Provider(如果没有Provider需求,可以跳过这个步骤)
from faker import Faker
from faker.providers import BaseProvider
import random fake = Faker() class NumProvider(BaseProvider):
def num(self):
ri = self.randomInt()
return str(ri()) def randomInt(self):
return lambda a=1,b=30:random.randint(a,b) def randomStr18(self,num):
ri = lambda a=0, b=9: random.randint(a, b)
s = ''
for i in range(18):
s = s + str(ri())
return s
4.使用
import factory
from demo_factory_boy.fbfactory.userfc import UserFactory if __name__ == "__main__":
# 单个生成
seq = []
uf = UserFactory()
print(uf.__dict__)
seq.append(uf.__dict__)
seq.append(UserFactory().__dict__)
print(seq) ##批量生成
list = []
fss = factory.build_batch(UserFactory, 4)
for fs in fss:
list.append(fs.__dict__)
print(list)
##部分字段修改
uff = UserFactory(shipped=True)
print(uff.school.__dict__)
print(uff.__dict__)
print(uff.__dir__())
结果:

利用Factory-boy来生成实例数据的更多相关文章
- C# 利用Newtonsoft.Json 序列化生成Json数据
现在需要将一些数据转化成json格式返回给调用者, 使用Newtonsoft.Json.DLL库来帮助我们序列化 举例: {"300033":{"MC":&qu ...
- 利用TPC-H为MYSQL生成数据
## 利用TPC-H为MYSQL生成数据 导言 这篇文章是看了joyee写的TPC-H数据导入MySQL教程以及另一篇网上的MySQL TPCH测试工具简要手册 后写的,有些内容是完全转载自以上两篇文 ...
- 利用Java随机,生成随机学生数据
为模拟向数据库中大量插入学生数据(注:此处应该用PreparedStatement.batchUpdate等批处理提高效率)的情形,通过Java随机来生成学生数据. 一.要生成的学生数据 studen ...
- 利用ForgeryPy生成虚拟数据
在程序研发过程中,我们往往需要大量的虚拟实验数据.Python中有多个包可以用于生成虚拟数据,其中功能较为完善的是ForgeryPy. 1 安装 采用pip进行安装: pip install Forg ...
- [20170623]利用传输表空间恢复部分数据.txt
[20170623]利用传输表空间恢复部分数据.txt --//昨天我测试使用传输表空间+dblink,上午补充测试发现表空间设置只读才能执行impdp导入原数据,这个也很好理解.--//这样的操作模 ...
- python 全栈开发,Day94(Promise,箭头函数,Django REST framework,生成json数据三种方式,serializers,Postman使用,外部python脚本调用django)
昨日内容回顾 1. 内容回顾 1. VueX VueX分三部分 1. state 2. mutations 3. actions 存放数据 修改数据的唯一方式 异步操作 修改state中数据的步骤: ...
- C#利用WMI获取 远程计算机硬盘数据
一.利用WMI获取 远程计算机硬盘数据,先引入"System.Management.dll"文件. /// <summary> /// 获取存储服务器硬盘 ...
- 简单利用XSS获取Cookie信息实例演示
简单利用XSS获取Cookie信息实例演示 首先要找到一个有XXS的站,这里就不整什么大站了,谷歌一下inurl:'Product.asp?BigClassName',搜出来的命中率也比较高.随便 ...
- faker生成器生成虚拟数据的Python模块
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:行哥 今天给大家介绍一个Faker模块,一款基于Python的测试数 ...
随机推荐
- js阻止冒泡和默认事件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 1008-Redo
关于flag,都立下了 T1 考试的时候就觉得是贪心,但是不会反悔emm…… 于是正解就是一个堆优化可反悔的贪心=.= 每次找前面最小的,于是是小根堆. 我们在交易的时候发现后面的一个可以更优. 于是 ...
- 深入浅出 Java Concurrency (11): 锁机制 part 6 CyclicBarrier[转]
如果说CountDownLatch是一次性的,那么CyclicBarrier正好可以循环使用.它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).所谓屏障点就 ...
- 2019牛客暑期多校赛(第一场) A Equivalent Prefixes(单调栈)
传送门:https://ac.nowcoder.com/acm/contest/881/A 题意:给定两个数组a和b,求最大的p,满足在区间 [1,p] 中任何区间的两个数组的最小值的下标都相等. 思 ...
- 时间格式的时间 转json的时候变成正常的string时间20170519
public class JsonDateValueProcessor implements JsonValueProcessor { private String format ="yyy ...
- 关于开启Eureka安全Security认证后,客户端死活注册不上的问题
遇到一个问题"开启Eureka服务端的安全认证后,客户端死活注册不到Eureka上",已经尝试了以下办法,完全搞不定... 客户端出错的版本: spring-boot:2.0.3. ...
- js 获取复选框 和 并改变状态
function checkAll() { var checkbox = document.getElementById('vegeids');// var boxes = document.getE ...
- Redis源码解析:26集群(二)键的分配与迁移
Redis集群通过分片的方式来保存数据库中的键值对:一个集群中,每个键都通过哈希函数映射到一个槽位,整个集群共分16384个槽位,集群中每个主节点负责其中的一部分槽位. 当数据库中的16384个槽位都 ...
- Redis源码解析:11RDB持久化
Redis的RDB持久化的相关功能主要是在src/rdb.c中实现的.RDB文件是具有一定编码格式的数据文件,因此src/rdb.c中大部分代码都是处理数据格式的问题. 一:RDB文件格式 上图就是一 ...
- 移动端页面-点击input输入框禁止放大效果
点击input输入框会获取焦点并且放大 解决方法:在项目根目录找到 index.html <meta name="viewport" content="width= ...