GeoDjango - LayerMapping: в текущей транзакции произошла ошибка. Вы не можете выполнять запросы до конца 'атомарного' блока

Я использую LayerMapping для добавления шейп-файла в базу данных. Вот код, который я использую. Размер шейп-файла составляет ~ 100 МБ, поэтому нужно добавить кучу полигонов.

mapping = {'name': 'OBJECTID', 'poly': 'POLYGON'}
lm = LayerMapping(TestGeo, 'toronto geo/PROPERTY_BOUNDARIES_WGS84.shp', mapping)
lm.save(verbose=True)

После запуска приведенного выше кода я бы увидел около 10 секунд сообщений об успехе, показывающих что-то вроде Saved: 'name': 12345. Затем через 10 секунд сообщения превращаются в:

Failure to save: {'name': 12345, 'poly': (....)}: An error occurred in the current transaction. You can't execute queries until the end of the 'atomic' block.

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

Я наткнулся на аналогичная ошибка, но содержание, похоже, не связано.

Есть идеи, почему это происходит?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
190
2

Ответы 2

У меня тоже была похожая проблема. Оказалось, что моя модель была неправильно сконфигурирована, и ошибка возникла в первой итерации функции сохранения. Я предполагаю, что какая-то блокировка базы данных остается включенной, и последующие вызовы дают вам проблему с атомарным блоком? Попробуйте запустить lm.save(verbose=True, strict=True), чтобы поймать любой IntegrityError.

Похоже, что в исходном слое есть MultiPolygon.

измените геометрию вашего режима на модели. MultiPolygonField решит вашу проблему.

Другие вопросы по теме