#python #django #list #algorithm #django-models
Вопрос:
У меня возникли проблемы с этой функцией, которая создает дубликаты записей. У меня есть пара страниц с документами, которые содержат ответ в document
виде списка записей. Каждая страница содержит другой номер в этом списке. Когда все записи создаются в базе данных, она начинает дублировать их, потому что количество страниц превышает количество страниц, на которых есть документы.
Вот как выглядит ответ для каждой страницы:
{
"page": 3,
"limit": 10,
"count": 2,
"machines": [
{
"1234",
"location": "123 Random address",
"location_name": "Scraton",
"location_coordinates": {
"latitude": 54.443454,
"longitude": -124.9137471
},
{
"document_id": "1235",
"location": "124 Random address",
"location_name": "New York",
"location_coordinates": {
"latitude": 233.385037,
"longitude": -40.1823481
},
]
}
Вот функция, которая создает дубликаты.
def sync_all_documents(limit=1000, page_start=0,page_end=10):
for page in range(page_start, page_end):
try:
response_data = get_documents(limit=limit, page=page)
logger.info(f"Page Count: {response_data['count']}")
if(response_data['count'] == 0):
return
except RequestError as ex:
return # loop short circuits here
try:
documents = response_data[“documents”]
for document in documents:
# STEP 1 - Location
try:
serialized_location = serialize_location_information(document)
location, l_created = Location.objects.get_or_create(
latitude=serialized_location["latitude"],
longitude=serialized_location["longitude"],
defaults={
"country": serialized_location["country"],
"state": serialized_location["state"],
"city": serialized_location["city"],
"street_address": serialized_location["street_address"],
"postal_code": serialized_location["postal_code"],
"name": serialized_location["name"],
"status": serialized_location["status"],
}
)
if l_created:
except Exception as ex:
location = None
pass
# STEP 2 - Document
try:
serialized_document = serialize_document_information(document)
document, m_created = Document.objects.update_or_create(
atm_id=serialized_document[“document_id"],
defaults={
"provider": serialized_document[“provider"],
"status": serialized_document[“status"],
"location": location,
}
)
if m_created:
logger.info(f"New Document was created successfully")
except Exception as ex:
logger.error("Could not update/create Document)
pass # continue looping
except Exception as ex:
logger.error(“Document does not exist")
return # loop short circuits here
return "sync completed"