Python по умолчанию поддерживает работу с базой данных SQLite. Для этого применяется встроенная библиотека sqlite3, которая в python доступна в виде одноименного модуля.
Для подключения к бд в этой библиотеке определена функция connect():
1
|
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", которая располагается в той же папке, что и текущий скрипт (если такая база данных отсутствует, то она автоматически создается):
1
2
3
|
import sqlite3; con = sqlite3.connect( "metanit.db" ) |
Сопоставление типов SQLite и Python
Прежде чем начать работать с базой данных, следует понимать, как сопоставляются типы SQLite и типы Python. По умолчанию применяются следующие сопоставления:
Python |
SQLite |
None |
NULL |
int |
INTEGER |
float |
REAL |
str |
TEXT |
bytes |
BLOB |
Следует отметить, что при необходимости мы можем переопределять сопоставление, применяя кастомные конвертеры типов.
Получение курсора
Для выполнения выражений SQL и получения данных из БД, необходимо создать курсор. Для этого у объекта Connection вызывается метод cursor()
. Этот метод возвращает объект Cursor:
1
2
3
4
5
|
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:
1
2
3
4
5
6
7
8
9
10
11
|
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 и увидеть созданную таблицу
Автор: Евгений Морковин
0 комментариев