Как обновить данные в таблице django из файла csv, сохранив значение первичного ключа как есть.? - PullRequest
0 голосов
/ 20 октября 2011

У меня есть таблица, в которой уже есть некоторые данные.Теперь я хочу загрузить новые данные из CSV-файла и обновить некоторые из предыдущих значений этой таблицы.Я использую django 1.3 и sqlite3 в качестве базы данных.Но я не могу обновить таблицу.

1 Ответ

0 голосов
/ 20 октября 2011

Если вы не хотите изменять значения ключей Primay или не добавляете в таблицу новые объекты, которые могут дублировать старую информацию, - вам нужны какие-то данные, которые вы можете использовать в качестве параметров поиска в вашей базе данных. ,

Если у вас есть модель, которая представляет эти данные, тогда действительно легко использовать

m = Model.objects.get(somecolumn = somedata)
m.someothervalue = someotherdata
m.save()

Но зачем вообще включать в это django? Если у вас есть таблица CSV, то обновление этой информации - действительно случай написания запросов. и такие программы, как Excel и openoffice делают это очень легко. Если у вас уже есть данные в формате CSV, просто откройте данные в виде электронной таблицы и используйте функцию Concactenate Excels / OpenOffice для создания запросов на обновление

Update mytable set value1 = data1, value2 = data2 where somevalue = somedata;

Если вы использовали для этого openoffice, то в openoffice есть эта изящная функция преобразования текста в столбцы (под данными в меню программы), которая превращает конкатенированные значения в строку. Затем вы можете скопировать эти строки в командную строку или phppgadmin и запустить .. и вуаля, вы получите обновленные данные в вашей базе данных.

Редактировать (В ответ на ваш комментарий.):

Посмотрите на это: https://docs.djangoproject.com/en/dev/ref/models/querysets/#get-or-create

Если вы хотите использовать для этого django, используйте get_or_create. Но вы должны помнить, что если какой-либо из параметров, которые вы используете в методе get_or_create, изменился, то будет создан новый объект. Вот почему я сказал в начале поста, что вам нужны какие-то данные, которые не изменятся.

например (взято по ссылке выше)

obj, created = Person.objects.get_or_create(first_name='John', last_name='Lennon',
                  defaults={'birthday': date(1940, 10, 9)})

создаст новый объект (Person) при первом использовании. Но если использовать второй раз, а дата изменилась, то будет создан новый человек с тем же именем и фамилией, но с новой датой.

Так что, чтобы избежать этого, вам все равно нужно сделать что-то вроде

obj.someothervalue = someotherdata
obj.save()

если вы хотите иметь больший контроль над данными, это можно было бы изменить.

Алан.

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