填充Django数据库

时间:2015-10-08 19:35:27

标签: python mysql django database faker

我正在开发一个Django应用程序,用于存储用户信息,如地址,电话号码,姓名等。

我使用过PHP的Faker库以及Laravel附带的播种机。我已经能够用假数据填充数据库,但现在我正在使用Django。

我想用大约200个条目填充我的用户表。但是,我不希望条目是随机字符串。我希望它是像Laravel一样的假数据。我不知道怎么做。

如何保留虚假数据需要做什么?

这是为了向最终用户显示一些条目的应用程序,以便他可以查看统计信息和其他内容。数据将需要保留在数据库中。我尝试使用单元测试,但在单元测试结束后删除了数据库。

谢谢!

2 个答案:

答案 0 :(得分:17)

@ user3186459这是一个很好的问题。

要以一种很好的方式完成它,您需要Factory BoyFakercustom management commands的组合。

Factory Boy允许您创建用于生成有效对象的模板,Faker生成虚假数据。

当您安装Factory Boy,pip install factory_boy时,您也会获得Faker。

鉴于,

from django.db import models


class User(models.Model):
    name = models.CharField(max_length=64)
    address = models.CharField(max_length=128)
    phone_number = models.CharField(max_length=32)

您可以按如下方式定义工厂:

import factory  
import factory.django

class UserFactory(factory.django.DjangoModelFactory):  
    class Meta:
        model = User

    name = factory.Faker('name')
    address = factory.Faker('address')
    phone_number = factory.Faker('phone_number')

然后,您可以通过调用UserFactory.create()来创建虚假用户。

获得200名假用户的一种方法是跳转到shell python manage.py shell,然后执行:

 >>> # import UserFactory here
 >>> for _ in range(200):
 ...     UserFactory.create()

另一种可以提供更多灵活性的方法是创建自定义管理命令。

这是一个简单的例子:

from django.core.management.base import BaseCommand

# import UserFactory here


class Command(BaseCommand):
    help = 'Seeds the database.'

    def add_arguments(self, parser):
        parser.add_argument('--users',
            default=200,
            type=int,
            help='The number of fake users to create.')

    def handle(self, *args, **options):
        for _ in range(options['users']):
            UserFactory.create()

并且,您可以通过命令行运行它,例如python manage.py seedpython manage.py seed --users 50

答案 1 :(得分:2)

试用django-autofixture应用:
https://github.com/gregmuellegger/django-autofixture

  

这个应用程序旨在提供一种随机加载大量的简单方法   将测试数据生成到开发数据库中。你可以使用   管理命令通过命令行加载测试数据。

     

它被命名为autofixture,因为它基于django的灯具。   如果没有自动混合,您可以通过管理员添加测试数据以查看   您网站上的非静态网页外观。您使用dumpdata导出数据   将它发送给你的同事或在你制作之前保存它   manage.py重置应用程序等。随着您的网站变得越来越复杂   添加和重新添加数据的过程变得越来越烦人。

看到这个django包,也许可以帮助假测试和其他问题。 https://www.djangopackages.com/grids/g/fixtures/