Как клонировать миллионы копий модели базы данных в django - PullRequest
0 голосов
/ 21 июня 2020

У меня пользовательская модель User в django. Некоторые другие модели связаны с этой моделью пользователя, например UserDetails, Prlofile et c.

Теперь мне нужно около 100 тыс. Пользователей в моей базе данных для целей тестирования.

Я просто хочу создавать пользователей, изменяя их адрес электронной почты, который находится в модели User.

Как лучше всего создать такое c большое количество объектов и сохранить их в базе данных также с соответствующими связанными моделями.

Ответы [ 3 ]

0 голосов
/ 21 июня 2020

Просто напишите сценарий и запустите его один раз следующим образом:

import names
from . import YourModel

# Create the loop
for n in range(100000):

    # Assign random name
    username = names.get_full_name()

    # Assign random mail address
    email = username + '@gmail.com'

    # Write the new entry to your database table
    obj, created = YourModel.objects.update_or_create(
                                    defaults={
                                        'username': username,
                                        'email': email,
                                    }

Этого должно быть достаточно для ваших нужд. В противном случае вы можете расширить этот базовый пример c по мере необходимости, например, вставив список из нескольких почтовых адресов и т.д. c. Вы можете скопировать эту идею, чтобы использовать ее и для других ваших моделей.

0 голосов
/ 21 июня 2020

Наверное, это самый простой способ

from .models import YourModel


for n in range(100000):
    username, email = f'username{n}', f'email{n}@email.com'
    YourModel.objects.create(username=username, email=email)
0 голосов
/ 21 июня 2020

загрузите несколько тысяч имен в файл и закодируйте что-нибудь, что просто добавит name@gmail.com, name@email.com, name@whateveryouwant.com, а с именем просто сделайте его nameRANDOMNUMBERS, таким же для пароля. Чтобы получить 100к, потребуется время, но я не уверен, есть ли более простой способ сделать это.

...