From 0ab4aa7976f3d962e546e2328c8cbed9b88ee0e2 Mon Sep 17 00:00:00 2001 From: Emmy D'Anello Date: Sun, 12 May 2024 13:49:23 +0200 Subject: [PATCH] Trainline stations are imported using a raw query --- .../commands/update_trainline_stations.py | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/trainvel/core/management/commands/update_trainline_stations.py b/trainvel/core/management/commands/update_trainline_stations.py index fc2b40e..e91111e 100644 --- a/trainvel/core/management/commands/update_trainline_stations.py +++ b/trainvel/core/management/commands/update_trainline_stations.py @@ -3,7 +3,7 @@ from time import time import requests from django.core.management import BaseCommand -from django.db import transaction +from django.db import connection, transaction from tqdm import tqdm from trainvel.core.models import Station @@ -23,13 +23,15 @@ class Command(BaseCommand): values = {k.replace(':', '_').replace('normalised_code', 'normalized_code_trainline') .replace('same_as', 'same_as_id'): convert_value(v) for k, v in row.items()} - stations.append(Station(**values)) + stations.append(values) Station.objects.all().delete() - if options['verbosity'] >= 1: - self.stdout.write("Deleted all stations.") - start_time = time() - with transaction.atomic(): - Station.objects.bulk_create(stations) - if options['verbosity'] >= 1: - self.stdout.write(f"Inserted {len(stations)} stations in {time() - start_time:.2f} seconds.") + print("Deleted all stations.") + with connection.cursor() as cursor: + cursor.execute("BEGIN;") + keys = ", ".join(stations[0].keys()) + cursor.executemany( + f"INSERT INTO core_station ({keys}) VALUES ({', '.join(['%s'] * len(values))});", + [list(station.values()) for station in stations], + ) + cursor.execute("COMMIT;")