Невозможно включить расширения с Python SQlite3 - PullRequest
0 голосов
/ 30 марта 2020

После проверки некоторых связанных постов с помощью SQlite3 и того, как включить расширения, я обнаружил, что не отвечаю на свои вопросы и, отчаянно, прошу вас, ребята, здесь.

Я использую Python 3.7 в конкретная c среда pipenv (я думаю, что это среда venv). Python путь в env: / home / my_user / .local / share / virtualenvs / my_current_env / lib / python3 .7

Код:

with sqlite3.connect(":memory:") as conn: 
    conn.enable_load_extension(True)
    conn.load_extension("mod_spatialite.so")

Ошибка:

AttributeError: у объекта 'sqlite3.Connection' нет атрибута 'enable_load_extension'

Решения, которые я пробовал до сих пор:

(i) Go для основной установки Py37 и измените файл setup.py и замените его: SQLITE_OMIT_LOAD_EXTENSION для SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION Я не смог найти файл setup.py в среде pipenv Python путь ... не сделал t работа

(ii) Попробуйте сгенерировать курсор из SQlite и из курсора, выполнив расширение:

cursor=conn.cursor() 
res=cursor.execute("SELECT sqlite_compileoption_used('ENABLE_LOAD_EXTENSION');", "mod_spatialite.so") 
res.fetchall() 

Также не сработало: Ошибка:

ProgrammingError: указано неверное количество привязок. В текущем операторе используется 0, а поставлено 17.

Я новичок в SQlite и довольно плохо в Python, моя цель - активировать базу данных с помощью Spatialite. Пожалуйста, ваша помощь будет высоко ценится.

Лучший и много здоровья, Joueswant

1 Ответ

1 голос
/ 04 апреля 2020

Я думаю, что на ваш вопрос ответили по GIS Stack Exchange , я пытаюсь обобщить, как вы должны добиться его работы:

  • Сначала убедитесь, что у вас установлен соответствующий пакет - например в Ubuntu mod_spatialite соответствует libsqlite3-mod -atialite
  • (необязательно), проверяет, работает ли в sqlite3

    sqlite> .load 'mod_spatialite.so'

Итак, чтобы справиться с проблемой, в случае с Ubuntu вы должны сделать:

sudo apt install libsqlite3-mod-spatialite 

Затем запустить этот набор команд

import sqlite3
conn = sqlite3.connect(':memory:')
conn.enable_load_extension(True)
conn.load_extension("mod_spatialite.so")

И это просто работает на меня. В преддверии я думаю, что вам просто не хватает установленного пакета.

...