填充Django数据库

use*_*459 13 python mysql database django faker

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

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

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

我需要做些什么来保存虚假数据?

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

谢谢!

Dwa*_*oks 20

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

要以一种很好的方式完成它,您需要结合Factory Boy,Faker自定义管理命令.

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)
Run Code Online (Sandbox Code Playgroud)

您可以按如下方式定义Factory:

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')
Run Code Online (Sandbox Code Playgroud)

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

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

 >>> # import UserFactory here
 >>> for _ in range(200):
 ...     UserFactory.create()
Run Code Online (Sandbox Code Playgroud)

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

这是一个简单的例子:

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()
Run Code Online (Sandbox Code Playgroud)

而且,你会通过命令行与运行python manage.py seedpython manage.py seed --users 50例如.


Pau*_*soa 2

尝试该django-autofixture应用程序: https:
//github.com/gregmuellegger/django-autofixture

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

它之所以被命名为autofixture,是因为它基于django的fixtures。如果没有自动固定功能,您可以通过管理添加测试数据,以查看网站上的非静态页面的外观。您可以使用 dumpdata 导出数据,将其发送给您的同事,或者在创建 manage.py 重置应用程序等之前保留它。随着您的网站变得越来越复杂,添加和重新添加数据的过程变得越来越烦人。

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