用模拟实例填充数据库。
fillmydb的Python项目详细描述
用模拟实例填充数据库。
将orm模型包装到modelwrapper中,指定字段的外观 然后生成每个模型需要的实例数。
安装
- pip install fillmydb[peewee]如果您计划将其与peewee型号一起使用
- pip install fillmydb[django]如果您计划将其用于djanog型号(尚未实现)
- pip install fillmydb[sqlalchemy]如果您计划将其用于sqlalchemy模型(尚未实现)
与fake-factory
一起使用为单个模型生成实例:
import faker factory = faker.Factory.create() wrapper = ModelWrapper(TestModel) wrapper[TestModel].client_name = FieldSpec(factory.name) wrapper[TestModel].description = FieldSpec(factory.text) wrapper[TestModel].password_hash = FieldSpec(factory.binary, length=25) wrapper[TestModel].email = FieldSpec(factory.email) wrapper[TestModel].visits = FieldSpec(factory.pyint) item = wrapper.generate(100)
为多个模型生成实例:
from tests.models import User, Post, Like import faker factory = faker.Factory.create() wrapper = ModelWrapper(User, Like, Post) wrapper[User].name = FieldSpec(factory.name) wrapper[User].username = FieldSpec(factory.user_name) wrapper[User].description = FieldSpec(factory.text) wrapper[User].password_hash = FieldSpec(factory.binary, length=25) wrapper[User].email = FieldSpec(factory.email) wrapper[User].visits = FieldSpec(factory.pyint) wrapper[Post].title = FieldSpec(lambda _: "test", 1) wrapper[Post].text = FieldSpec(factory.text) # generating 10 users, 100 likes and 20 posts wrapper.generate(10, 100, 20)
一般工作流程
伪代码:
initial_to_order_queue() while models_to_process(): model = get_next_model() if model.has_unresolved_dependency(): push_back_to_queue(model) # process model for _ in range(number_of_instances): for field in model.fields(): # resolve_field(field) if field == ForeignKey: field = get_random_ref_model_instance() else: field = resolve_normal() mark_as_processed(model)