Ответ 1
sqlite3
Поддержка в Python может быть немного запутанной. Адаптер базы данных sqlite начинался как отдельный проект, pysqlite2, но для Python 2.5 его версия была включена в стандартную библиотеку Python под названием sqlite3. Оригинальный адаптер продолжает разрабатываться как отдельный проект, периодически обновляя версию в Python, чтобы соответствовать ей. Если вы пытаетесь использовать более новую версию адаптера, она обычно устанавливается как pysqlite2
, чтобы не противоречить версии, включенной в стандартную библиотеку. И, в зависимости от того, как он был построен, он может ссылаться на другую версию базовой библиотеки баз данных sqlite3. Поэтому убедитесь, что вы импортируете его правильно:
>>> import sqlite3
>>> sqlite3.version_info
(2, 4, 1)
>>> sqlite3.sqlite_version_info
(3, 6, 11)
>>> from pysqlite2 import dbapi2 as sqlite3
>>> sqlite3.version_info
(2, 5, 5)
>>> sqlite3.sqlite_version_info
(3, 6, 18)
version_info
- это версия адаптера базы данных sqlite3
(pysqlite2
или встроенного sqlite3
).
sqlite_version_info
- это версия базовой библиотеки баз данных sqlite3
.
Использование from ... import ... as sqlite3
предлагается так, чтобы остальная часть вашего кода не нуждалась в изменении, если вы переходите от одной версии к другой.
Примечание, enable_load_extension
впервые появился в pysqlite2
2.5.0.
EDIT: enable_load_extension
отключается по умолчанию при создании адаптера. Чтобы включить его, вы можете создать pysqlite2
вручную. Следующий рецепт предполагает систему unix
-y и самую последнюю версию pysqlite2
, которая на момент написания этой статьи составляет 2.5.5.
Сначала, если вы первоначально установили адаптер через easy_install
, сначала удалите его:
$ sudo /path/to/easy_install -m pysqlite # or whatever package name you first used
Будет выводиться вывод, включающий такие строки, как:
Removing pysqlite 2.5.5 from easy-install.pth file
Using /path/to/site-packages/pysqlite-2.5.5-py2.x-something.egg
Удалите яйцо, используя указанное имя файла (имя будет меняться в зависимости от вашей платформы и версии и может ссылаться на файл или каталог):
$ sudo rm -r /path/to/site-packages/pysqlite-2.5.5-py2.x-something.egg
Теперь загрузите и извлеките исходный tarball pysqlite-2.5.5
:
$ mkdir /tmp/build
$ cd /tmp/build
$ curl http://oss.itsystementwicklung.de/download/pysqlite/2.5/2.5.5/pysqlite-2.5.5.tar.gz | tar xz
$ cd pysqlite-2.5.5
Затем отредактируйте файл setup.cfg
, чтобы прокомментировать директиву SQLITE_OMIT_LOAD_EXTENSION
:
$ ed setup.cfg <<EOF
> /SQLITE_OMIT_LOAD_EXTENSION/s/define=/#define=/
> w
> q
> EOF
Так как версия sqlite3
настолько старая (3.4.0), вы также должны создать последнюю библиотеку sqlite3
. Это легко сделать в pysqlite2
setup.py script:
$ /path/to/python2.x setup.py build_static
Это автоматически загрузит последний источник альянса sqlite3 и построит адаптер вместе с обновленной статически связанной версией sqlite3
. Этот шаг может занять много времени.
ОБНОВЛЕНИЕ (2015/07/21). В соответствии с последним pysqlite 2.6.3 commit вы нужно загружать исходный код sqlite самостоятельно и помещать их в корневую папку pysqlite.
Теперь установите адаптер:
$ sudo /path/to/python2.x setup.py install
и выполните тесты:
$ cd # somewhere out of the build directory
$ /path/to/python2.x
>>> from pysqlite2 import test
>>> test.test()
и, если они пройдут, вы должны быть установлены.
В качестве бонуса, если причина, по которой вам требуется поддержка расширения загрузки, заключается в использовании расширения для текстового поиска sqlite3
, FTS3
, вы должны обнаружить, что он был включен как часть статической библиотеки, и дальнейшая работа не требуется:
>>> from pysqlite2 import dbapi2 as sqlite3
>>> con = sqlite3.connect(":memory:")
>>> con.execute("create virtual table recipe using fts3(name, ingredients)")
<pysqlite2.dbapi2.Cursor object at 0xca5e0>