Импортируйте данные csv в базу данных и обновите существующие данные, используя их id в django

Я хочу обновить некоторые существующие данные, загрузив CSV-файл.

У меня есть некоторые данные в базе данных MySQL и в некоторых из них есть орфографические ошибки, а в некоторых другие ошибки.

Итак, у меня есть правильные данные в CSV-файле, и я хочу загрузить их и обновить существующие данные в базе данных. Это займет id и обновит существующие данные.

Ниже приведен код для импорта данных в базу данных. Как я могу изменить этот код, чтобы обновить существующие данные в базе данных?

views.py

# Import the data to database
def import_countries(request):
    with open('C:/python/Azuro/azuro_django/pms/templates/pms/countryname.csv') as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:
            data = Country(currency=row['Currency'], name=row['Country'])
            data.save()
            
    return HttpResponse('Data Uploaded!!')

Спасибо!

В django существует несколько способов обновления записи, один из которых update_or_create, также вы можете получить запись и установить необходимые поля, которые вы хотите обновить. Проблема с этими подходами в том, что они будут делать запрос в базу данных для каждой записи, а последний подход будет делать два запроса в каждой записи (один для получения и один для обновления)

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

countries_to_update = []
for row in reader:
    countries_to_update.append(
        Country(id=row["id"], currency=row["Currency"], name=row["Country"])
    )

Country.objects.bulk_update(countries_to_update, fields=["currency", "name"])

Обратите внимание, что он обновит только те поля, которые вы указали в аргументе "fields", в приведенном выше случае будут обновлены только "currency" и "name".

Вернуться на верх