Sqlite на Python 3 с Spatialite и полной поддержкой пространственных индексов (т.е. rtree) - PullRequest
2 голосов
/ 07 января 2020

Это сценарий:

Я использую Python 3 (от 3,6 до 3,8 на Windows 10, используя Pipenv и vanilla Python), чтобы создать файл SQLite с поддержкой Spatial и несколькими триггерами на основе пространственных индексов.

Создание базы данных и добавление записей прекрасно работает после загрузки Spatialite

  conn.enable_load_extension(True)
  conn.load_extension("mod_spatialite")

Однако добавление пространственных ссылок с кодом, например ниже

  SELECT CreateSpatialIndex( 'nodes' , 'geometry' );"""

возвращает следующую ошибку

updateTableTriggers: «нет такого модуля: rtree»

Я попытался скомпилировать расширение rtree, следуя некоторым рекомендациям Компиляция SQLite RTREE в MSV C? и использование VS 2016 (16.4.2).

Но я получаю всевозможные ошибки при попытке загрузить это в SQL (возможно, не компилируется должным образом, но я пытался несколько вещей и ничего не получалось). Моей лучшей попыткой была успешная компиляция с использованием в значительной степени инструкций, которые я упоминал выше, но когда я попытался

   p.conn.load_extension("libSqliteRtree.dll")

, я получил

sqlite3.OperationalError: Указанная процедура не смогла быть найденным.

Я действительно в растерянности, так как, кажется, очень мало дискуссий по этой теме c везде, где я смотрел. Несколько вопросов, которые приходят на ум:

Определенные c инструкции по компиляции / хитрости / версии компилятора, которые я должен использовать?

Можно ли даже скомпилировать и загрузить rtree в Python 3 с использованием стандартной библиотеки sqlite3?

Это относится к Windows?

Существуют ли альтернативные пакеты SQLite Python, которые могут выполнить эту работу (я не нашел ни одного в PyPI)?

Однако важно, чтобы решение работало на разных платформах.

...