Как установить sqlite3 python
Перейти к содержимому

Как установить sqlite3 python

  • автор:

Как я могу установить 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().

Классы, функции и константы модуля sqlite3

Вызов функции connect() приводит к созданию объекта-экземпляра от класса Connection. Этот объект обеспечивает связь с файлом базы данных, представляет конкретную БД в программе:

>>> db = sqlite3.connect(‘site.sqlite’) >>> type(db)

Почему объект создается с помощью функции, а не от самого класса? Видимо дело в том, что помимо имени-адреса базы данных может передаваться ряд других необязательных аргументов, первичной обработкой которых занимается функция.

После того как экземпляр Connection создан, чтобы выполнять SQL-команды, над создать еще один объект, но теперь уже от класса Cursor. Делается это с помощью метода cursor() объекта типа Connection:

Объект Cursor

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *