#python #django #helper
Вопрос:
Я пытаюсь написать две функции в Django в качестве помощников, где это поможет мне проверить, поступают ли новые данные или были ли изменены существующие данные для дальнейшего обновления
is_new_row - will understand if the row is new and add it to an array that will be bulk created
is_data_modified - will look for the row in the old data and understand if the data of that row is changed and will update only if its changed
old_data = Person.objects.all()
for row in api_data:
if is_new_row(row, old_data):
new_rows_array.append(row)
else:
if is_data_modified(row, old_data):
...
# do the update
else:
continue
помощники
def is_new_row(row, old_data):
??
def is_data_modified(row, old_data):
??
Комментарии:
1. как вы распознаете, когда данные являются новыми? Как вы получаете эти данные? Обычно у человека нет нового объекта
ID/pk
, но Django уже использует его для создания новых или обновления данных в базе данных, и вам не нужно делать это самостоятельно.2. @furas использует один подход
old_data = Person.objects.all()
, но я также могу использовать какой-то var, созданный = get_or_created, если он новый или нет3. в первый момент я не видел, что вы получаете данные извне
api_data
— но данные должны иметь некоторые уникальные значения, которые никогда не меняются — т. Е.ID
— а затем вы должны искать этоID
в базе данных иINSERT
илиUPDATE
. Если вы можете изменить каждое поле в строке, вы можете изменить все значения в строке, и вы не знаете, следует ли вам вставлять как новое или заменять другой строкой..4. точно, но как мне написать своим помощникам, чтобы они это сделали? Я просто пытаюсь отследить, сравнить старые данные с новыми , и если они новые
5. как и любой другой запрос в базе
Person.objects.select(id=row.id)
данных, и если вы не получите результата, вам придется создать новыйPerson
иsave()
его. Если вы получите результатperson
, то поместите в него новые значенияperson
и также используйтеsave()
его.