Эффективное заполнение базы данных с помощью python и Django

Мы пытаемся заполнить базу данных с помощью Python и Django случайными числами, но нам нужно перебрать много строк, и на выполнение этой задачи уходит около 20 минут.

Вот наш код. Нам нужно перебрать 210000 строк

def populate(request):

    all_accounts = Account.objects.all()
    count = 0

    for account in all_accounts:
        account.avg_deal_size = round(random.randint(10, 200000), 2)
        account.save()
        print(f"Counter of accounts: {count}")
        count += 1

Спасибо!

Предполагая, что вам не нужна логика в .save(), или сигналы для выполнения и т.д., просто используйте SQL, чтобы ваша RDBMS сделала тяжелую работу. Это должно выполняться за несколько секунд, если это так.

from django.db import connection

def populate(request):
    with connection.cursor() as cur:
        cur.execute("UPDATE myapp_account SET avg_deal_size = round(10 + random() * 190000, 2)")
        (res,) = cur.fetchone()
        print(f"{res} rows affected.")
Вернуться на верх