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
-й систему и последнюю версию 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
Теперь скачайте и распакуйте исходный архив 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:
$ /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>