Как использовать update_or_create при обновлении значений в базе данных Django из файлов CSV - PullRequest
0 голосов
/ 18 марта 2020

Краткое описание проблемы: я не понимаю синтаксис для objects.update_or_create в Django.

CSV-файлы имеют имена полей в первой строке:

# data.csv
field1, field2,
12, 14,
35, 56,

У меня есть модель для моей базы данных postgresql в models.py:

from django.db import models
# example model, real one has 100 fields of different types
class MyModel(models.Model):
    field1 = models.IntegerField(blank=True, null=True)
    field2 = models.IntegerField(blank=True, null=True)

Теперь я хочу создать / обновить базу данных при поступлении новых данных в виде файлов CSV:

import csv
with open('./datafiles/data.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        update, created = MyModel.objects.update_or_create(
            defaults={???},
            ???
        )

    update.save()

Что входит в отмеченные вопросительным знаком места?

В документах говорится это .

1 Ответ

1 голос
/ 18 марта 2020

В соответствии с документацией .

obj, created = Person.objects.update_or_create(
    first_name='John', last_name='Lennon',
    defaults={'first_name': True},
)

Если Джон Леннон уже существует, то имя будет изменено на Боба. Если бы этого не существовало, человек был бы создан с именем Боб Леннон. Это относится к случаю обновления существующей записи, а также к необходимости создания ее в одну аккуратную строку.

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

Пожалуйста, прочитайте документацию, чтобы полностью понять, что получилось, и потенциальную необходимость добавления уникального (не-pk) поля или уникальной группы полей вместе в ваш модель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...