Как я могу установить sqlite3 на Python?
Может кто-нибудь сказать мне, как установить пакет sqlite3 в самую последнюю версию Python? Я использую Macbook, и в командной строке я попробовал:
pip install sqlite
но появляется сообщение об ошибке.
Jin-Dominique 23 окт. 2013, в 03:13
Поделиться
Если ваш python собран из исходного кода вручную и встречает эту ошибку, вы должны сначала установить пакет sqlite-devel, а затем пересобрать python, как сказал @falsetru, имя пакета будет различаться в зависимости от операционной системы.
ngn999 28 март 2016, в 01:54
Было бы лучше, если бы вы могли перечислить ошибку, которую вы нажали.
jersey bean 14 авг. 2017, в 17:59
Для всех, кто пытался собрать Python из исходного кода и столкнулся с этой ошибкой: Этот действительно хороший ответ адресован процессу bulild и нужным вам зависимости. stackoverflow.com/a/6171511/6273503
Harper 28 сен. 2017, в 08:35
Рассмотрим небольшую поправку в заголовке: модуль sqlite3 в Python
Jonathan Komar 30 янв. 2019, в 12:09
Показать ещё 2 комментария
Поделиться:
4 ответа
Лучший ответ
Вам не нужно устанавливать модуль sqlite3 . Он входит в стандартную библиотеку (начиная с Python 2.5).
falsetru 23 окт. 2013, в 01:35
Поделиться
спасибо 🙂 было интересно что я сделал не так
Jin-Dominique 23 окт. 2013, в 01:23
У меня на самом деле есть Python 2.5.4, который не включает sqlite3 🙁
shevy 04 июль 2014, в 13:13
@user722915 user722915, В соответствии с тем, что нового в Python 2.5 , модуль pysqlite ( pysqlite.org ), оболочка для встроенной базы данных SQLite, был добавлен в стандартную библиотеку под именем пакета sqlite3.
falsetru 04 июль 2014, в 13:16
если ваш python3 собран из исходного кода вручную и встречает эту ошибку, вы должны сначала установить пакет sqlite-devel, а затем пересобрать python3.
ngn999 28 март 2016, в 01:28
@ngn999 ngn999, лучше прокомментируй вопрос, чтобы ОП узнал об этом. Потому что на это отвечали очень долго, и OP не уведомляется, если вы комментируете ответ.
falsetru 28 март 2016, в 01:49
@ngn999 ngn999, кстати, имя пакета будет отличаться в зависимости от операционной системы. Например, в Ubuntu это libsqlite3-dev .
falsetru 28 март 2016, в 01:50
@falsetru спасибо за ваши советы.
ngn999 28 март 2016, в 01:51
Показать ещё 5 комментариев
У меня есть python 2.7.3, и это решило мою проблему:
pip install pysqlite
nicolimo86 10 март 2015, в 09:55
Поделиться
Учтите, что это не относится к Python 3.
Phyticist 12 дек. 2016, в 19:32
Для Python версии 3:
pip install pysqlite3
Hoss 25 июнь 2018, в 20:10
Поделиться
Обычно он включен. Однако, как сказал @ngn999, если ваш питон был создан из исходного кода вручную, вам придется его добавить.
Ниже приведен пример сценария, который будет инсталлировать инкапсулированную версию (виртуальную среду) Python3 в ваш каталог пользователя с инкапсулированной версией sqlite3.
INSTALL_BASE_PATH="$HOME/opt" cd ~ mkdir build cd build [ -f Python-3.6.2.tgz ] || wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz tar -zxvf Python-3.6.2.tgz [ -f sqlite-autoconf-3240000.tar.gz ] || wget https://www.sqlite.org/2018/sqlite-autoconf-3240000.tar.gz tar -zxvf sqlite-autoconf-3240000.tar.gz cd sqlite-autoconf-3240000 ./configure --prefix=$ make make install cd ../Python-3.6.2 LD_RUN_PATH=$/lib configure LDFLAGS="-L $/lib" CPPFLAGS="-I $/include" LD_RUN_PATH=$/lib make ./configure --prefix=$ make make install cd ~ LINE_TO_ADD="export PATH=$/bin:\$PATH" if grep -q -v "$" $HOME/.bash_profile; then echo "$" >> $HOME/.bash_profile; fi source $HOME/.bash_profile
Зачем это делать? Возможно, вам понадобится модульная среда python, которую вы можете полностью уничтожить и восстановить, не затрагивая вашу операционную систему, — для независимой среды разработки. В этом случае решение также должно быть установлено модулем sqlite3.
sqlite3 + расширения в Python
Подключить расширение для SQLite с помощью стандартного модуля sqlite3 довольно просто. Скачиваете файл, вызываете пару функций, и готово. Если только вам не повезло использовать macOS, в который sqlite3 не поддерживает расширения.
Мне хотелось еще упростить процесс (и заодно решить проблему с макосью). Поэтому я создал пакет sqlean.py : полностью совместимую замену стандартному sqlite3 , которая заодно включает полезные расширения.

Установка и использование
Установите пакет через pip install :
pip install sqlean.py
И используйте вместо sqlite3 :
import sqlean as sqlite3 # такой же интерфейс, как в стандартном `sqlite3` conn = sqlite3.connect(":memory:") conn.execute("create table employees(id, name)") # плюс сразу подключены расширения из `sqlean` cur = conn.execute("select median(value) from generate_series(1, 99)") print(cur.fetchone()) # (50.0,) conn.close()
Обратите внимание: пакет называется sqlean.py , а в импортах просто sqlean . Имя пакета sqlean было уже занято каким-то зомби-проектом, так что мне пришлось добавить суффикс .py .
Расширения
sqlean.py включает 12 расширений для SQLite:
- crypto: хеш-функции, кодирование и декодирование.
- define: пользовательские функции и динамический SQL.
- fileio: чтение и запись файлов.
- fuzzy: нечеткое сравнение строк и фонетические алгоритмы.
- ipaddr: работа с IP-адресами.
- math: математические функции.
- regexp: регулярные выражения.
- stats: математическая статистика.
- text: работа со строками.
- unicode: поддержка юникода.
- uuid: уникальные идентификаторы.
- vsv: работа с CSV-файлами.
Платформы
Пакет доступен для следующих операционных систем:
- Windows (64 бита)
- Linux (64 бита)
- macOS (процессоры Intel или Apple)
Если у вас другая ОС — можно собрать из исходников.
Подписывайтесь на канал, чтобы не пропустить новые заметки
SQLite
Python по умолчанию поддерживает работу с базой данных SQLite. Для этого применяется встроенная библиотека sqlite3 , которая в python доступна в виде одноименного модуля.
Для подключения к бд в этой библиотеке определена функция connect() :
sqlite3.connect(database, timeout=5.0, detect_types=0, isolation_level='DEFERRED', check_same_thread=True, factory=sqlite3.Connection, cached_statements=128, uri=False)
Она принимает следующие параметры:
- database : путь к файлу базы данных. Если база данных расположена в памяти, а не на диске, то для открытия подключения используется «:memory:»
- timeout : период времени в секундах, через который генерируется исключение, если файл бд занят другим процессом
- detect_types : управляет сопоставлением типов SQLite с типами Python. Значение 0 отключает сопоставление
- isolation_level : устанавливает уровень изоляции подключения и определяет процесс отрытия неявных транзакций. Возможные значения: «DEFERRED» (значение по умолчанию), «EXCLUSIVE», «IMMEDIATE» или None (неявные транзакции отключены)
- check_same_thread : если равно True (значение по умолчанию), то только поток, который создал подключение, может его использовать. Если равно False , подключение может использоваться несколькими потоками.
- factory : класс фабрики, который применяется для создания подключения. Должен представлять класс, производный от Connection . По умолчанию используется класс sqlite3.Connection
- cached_statements : количество SQL-инструкций, которые должны кэшироваться. По умолчанию равно 128.
- uri : булевое значение, если равно True , то путь к базе данных рассматривается как адрес URI
Обязательным параметром функции является путь к базе данных. Результатом функции является объект подключения (объект класса Connection), через затем можно взаимодействовать с базой данных.
Например, подключение к базе данных «metanit.db», которая располагается в той же папке, что и текущий скрипт (если такая база данных отсутствует, то она автоматически создается):
import sqlite3; con = sqlite3.connect("metanit.db")
Сопоставление типов SQLite и Python
Прежде чем начать работать с базой данных, следует понимать, как сопоставляются типы SQLite и типы Python. По умолчанию применяются следующие сопоставления:
Следует отметить, что при необходимости мы можем переопределять сопоставление, применяя кастомные конвертеры типов.
Получение курсора
Для выполнения выражений SQL и получения данных из БД, необходимо создать курсор. Для этого у объекта Connection вызывается метод cursor() . Этот метод возвращает объект Cursor :
import sqlite3; # создаем подключение con = sqlite3.connect("metanit.db") # получаем курсор cursor = con.cursor()
Выполнение запросов к базе данных
Для выполнения запросов и получения данных класс Cursor предоставляет ряд методов:
- execute(sql, parameters=(), /) : выполняет одну SQL-инструкцию. Через второй параметр в код SQL можно передать набор параметров в виде списка или словаря
- executemany(sql, parameters, /) : выполняет параметризованное SQL-инструкцию. Через второй параметр принимает наборы значений, которые передаются в выполняемый код SQL.
- executescript(sql_script, /) : выполняет SQL-скрипт, который может включать множество SQL-инструкций
- fetchone() : возвращает одну строку в виде кортежа из полученного из БД набора строк
- fetchmany(size=cursor.arraysize) : возвращает набор строк в виде списка. количество возвращаемых строк передается через параметр. Если больше строк нет в наборе, то возвращается пустой список.
- fetchall() : возвращает все (оставшиеся) строки в виде списка. При отсутствии строк возвращается пустой список.
Создание таблицы
Для создания таблицы в SQLite применяется инструкция CREATE TABLE . Например, создадим в базе данных «metanit.db» таблицу people:
import sqlite3; con = sqlite3.connect("metanit.db") cursor = con.cursor() # создаем таблицу people cursor.execute("""CREATE TABLE people (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER) """)
В метод cursor.execute() передается инструкция CREATE TABLE , которая создает таблицу people с тремя столбцами. Столбец id представляет идентификатор пользователя, хранит данные типа Integer, то есть число, и также представляет первичный ключ, значение которого будет автоматически генерироваться и инкрементироваться с каждой новой строкой. Второй столбец — name представляет строку — имя пользователя. И третий столбец — age представляет возраст пользователя.
После выполнения скрипта мы можем открыть базу данных в каком-нибудь браузере баз данных SQLite, например, в DB Browser for SQLite и увидеть созданную таблицу
Модуль sqlite3 языка Python
Сами по себе СУБД редко используются для работы с базами данных. В том смысле, что в реальных проектах связки БД + СУБД бывает недостаточно. Обычно с СУБД работают через какой-либо язык программирования. Это позволяет более гибко принимать запросы, обрабатывать ответы перед передачей их куда-либо далее. Ведь у императивного, а не декларативного как SQL, языка программирования средств для работы с данными больше, да и логика богаче.
При этом неизбежна определенная специфика, накладываемая языком программирования и особенностями его работы с СУБД. Есть команды на подключение к БД, использование объекта «курсора», выполнение SQL-запросов, сохранение изменений в БД и др.
Инструменты для работы с конкретной СУБД не являются базовыми командами и объектами самого языка. Обычно они подключаются через импорт модуля или библиотеки. Так модуль sqlite3 входит в установочный пакет языка Python, является компонентом стандартной библиотеки и не требует отдельной загрузки и установки. Однако его все равно надо импортировать:
>>> import sqlite3
Библиотеку SQLite также не требуется устанавливать отдельно. Она есть в установочном пакете Python. Непосредственно модуль sqlite3 – это API к СУБД SQLite. Своего рода адаптер, который переводит команды, написанные на Питоне, в команды, которые понимает SQLite. Как и наоборот, доставляет ответы от SQLite в python-программу.
Модуль sqlite3 содержит много классов, функций и констант. Их перечень можно посмотреть с помощью функции dir().

Вызов функции connect() приводит к созданию объекта-экземпляра от класса Connection. Этот объект обеспечивает связь с файлом базы данных, представляет конкретную БД в программе:
>>> db = sqlite3.connect(‘site.sqlite’) >>> type(db)
Почему объект создается с помощью функции, а не от самого класса? Видимо дело в том, что помимо имени-адреса базы данных может передаваться ряд других необязательных аргументов, первичной обработкой которых занимается функция.
После того как экземпляр Connection создан, чтобы выполнять SQL-команды, над создать еще один объект, но теперь уже от класса Cursor. Делается это с помощью метода cursor() объекта типа Connection:

SQL-команды выполняются с помощью метода execute() и некоторых других. Если запрос длинный, и его удобно разбить на несколько строк, используют тройные кавычки. Создадим таблицы:
>>> cur.execute(»’ . CREATE TABLE sections ( . _id INTEGER PRIMARY KEY, . name TEXT)»’) >>> cur.execute(»’ . CREATE TABLE pages ( . _id INTEGER PRIMARY KEY AUTOINCREMENT, . title TEXT, . url TEXT NOT NULL, . theme INTEGER NOT NULL, . num INTEGER NOT NULL DEFAULT 100, . FOREIGN KEY (theme) . REFERENCES sections(_id)) . »’)
Если нужна поддержка внешнего ключа включим ее:
>>> cur.execute(«PRAGMA foreign_keys = ON»)
Обратим внимание, что в конце SQL-запросов здесь точка с запитой не ставятся. Также метод возвращает сам объект.
Заполнять таблицы можно тоже с помощью execute(). Однако, если требуется вставить несколько записей, лучше воспользоваться методом executemany():
>>> themes = [ . (1, ‘Information’), . (2, ‘Digital Systems’), . (3, ‘Boolean Algebra’)] >>> cur.executemany(»’ . INSERT INTO sections . VALUES (?, ?)»’, themes)
Мы создаем список из кортежей. Каждый кортеж – это отдельная запись таблицы. Метод executemany() выполняет SQL-команду по отношению к каждому элементу списка. При этом данные из кортежа подставляются вместо знаков вопроса. Такая подстановка работает и через execute():
>>> cur.execute(»’ . INSERT INTO sections VALUES . (4, ?)»’, (‘Algorithm’,))
То, что подставляется, должно быть кортежем. Через знаки вопроса кортеж как бы распаковывается.
Есть еще метод executescript(). В качестве аргумента передается скрипт на языке SQL, который может включать несколько запросов, каждый из которых заканчивается точкой с запятой.
У объекта-курсора есть методы fetchone(), fetchmany() и fetchall(), которые позволяют извлекать из него данные, если sql-запрос предполагал их передачу. По-сути они наделяют курсор свойствами объекта-итератора (такой имеет метод __next__()):
>>> cur.execute("SELECT * FROM sections") >>> cur.fetchone() (1, 'Information') >>> cur.fetchone() (2, 'Digital Systems') >>> cur.__next__() (3, 'Boolean Algebra')
Два других метода:
>>> cur.execute("SELECT * FROM sections") >>> cur.fetchall() [(1, 'Information'), (2, 'Digital Systems'), (3, 'Boolean Algebra'), (4, 'Algorithm')] >>> cur.fetchall() [] >>> cur.execute("SELECT * FROM sections") >>> cur.fetchmany(2) [(1, 'Information'), (2, 'Digital Systems')] >>> cur.fetchmany(2) [(3, 'Boolean Algebra'), (4, 'Algorithm')] >>> cur.fetchmany(2) []
Для того, чтобы корректно завершить работу с базой данных, надо применить изменения (выполнить транзакцию) и разорвать соединение. Обратите внимание, это делается по отношению к экземпляру Connection, а не Cursor:
>>> db.commit() >>> db.close()
Закрытие без commit() приведет к потере изменений, сделанных за сессию. Если нужно откатить, а не применить, изменения текущей сессии, используется метод rollback().
X Скрыть Наверх
Введение в реляционные базы данных. SQLite