Вы предположение корректны. Это столь же просто как массив C NSUInteger. Параметр длины является числом элементов в индексном массиве.
Массивы в C часто идентифицируются как указатель (в этом случае NSUInteger *) с параметром длины или известным разделителем такой как \0 для струн до (который является просто массивом символов).
Поддержка sqlite3
в Python может немного сбивать с толку. Адаптер базы данных sqlite начинался как отдельный проект, pysqlite2 , но для Python 2.5 его версия была включена в стандартную библиотеку Python под именем sqlite3 . Исходный адаптер продолжает разрабатываться как отдельный проект, в то время как версия в Python периодически обновляется, чтобы соответствовать ей. Если вы пытаетесь использовать более новую версию адаптера, она обычно устанавливается как pysqlite2
, чтобы не конфликтовать с версией, включенной в стандартную библиотеку. И, в зависимости от того, как он был построен, он может ссылаться на другую версию базовой библиотеки sqlite3 . Поэтому убедитесь, что вы импортируете его правильно:
sqlite_version_info
- это версия базовой библиотеки sqlite3
.
Использование из ... импорта ... как sqlite3
предлагается, чтобы остальная часть ваш код не нужно менять, если вы переходите с одной версии на другую.
Обратите внимание: enable_load_extension
впервые появился в pysqlite2
2.5.0.
РЕДАКТИРОВАТЬ: 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
Теперь загрузите и извлеките архив исходного кода 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 вы должны загрузить Исходный код 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()
, и, если они пройдут успешно, все будет готово.
Как бонус, если вам нужна поддержка расширения загрузки, чтобы использовать расширение полнотекстового поиска FTS3
sqlite3
, вы должны обнаружить, что оно было включено как часть статической библиотеки, а не необходима дальнейшая работа:
>>> 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>
Вам нужно посмотреть на свой путь к Python и убедиться, что нужный sqlite установлен в более ранний каталог, чем встроенный sqlite.
Вы можете увидеть путь с помощью:
import sys
print(sys.path)
Если вы хотите узнать, откуда взялся модуль, попробуйте:
print(sqlite3.__file__)