Импортируйте данные 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".