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. По умолчанию применяются следующие сопоставления:
Python | SQLite |
None | NULL |
int | INTEGER |
float | REAL |
str | TEXT |
bytes | BLOB |
Следует отметить, что при необходимости мы можем переопределять сопоставление, применяя кастомные конвертеры типов.
Для выполнения выражений 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 и увидеть созданную таблицу