Базы данных являются неотъемлемой частью Data Science, поскольку часто приходится работать с хранящимися данными: получать, добавлять, удалять, обновлять, а также анализировать. Сегодня мы расскажем о встроенной в Python СУБД — SQLite: узнаем, как подключаться к базам данных, как выполнять запросы и как обезопасить их от злоумышленников.
CУБД SQlite
SQLite – это легковесная, быстрая, надежная и встраиваемая система управления базами данных (СУБД). В отличие от клиент-серверных СУБД, таких как MySQL, PostgresSQL, Oracle и др., SQLite ориентирована на экономию, надежность и простоту. Используется эта СУБД в следующих случаях:
- Встраиваемые устройства и Интернет вещей (Internet of things). Поскольку она не требует администрирования и специализированной поддержки, SQLite может быть встроена в бытовые приборы, автомобили, самолеты, датчики, роботов.
 - Standalone-приложения, которые используются на персональных компьютерах, например, система контроля версия, финансовые инструменты, хранение заметок и т.д.
 - Веб-сайты с низким или средним трафиком.
 - Анализ данных (data analysis) для хранения датасетов.
 - Кэширование данных из корпоративной СУБД.
 
А вот не рекомендуется использовать SQLite там, где есть:
- Большие данные (Big data),
 - Высокий трафик со множеством серверов,
 - Множество распределенных потоков,
 - Данные отделены от приложения, то есть не находятся на том же физическом устройстве, где установлено само приложение.
 
В Python по умолчанию встроена SQLite в качестве библиотеки sqlite3, с которой мы сейчас ознакомимся.
Подключение локальное и через оперативную память
Для работы с SQLite не нужно ничего устанавливать, достаточно импортировать Python-библиотеку:
import sqlite3
После этого можно пойти по двум путям: создать базу данных у себя на диске или в оперативной памяти. При работе с оперативной памятью после разрыва соединения все данные потеряются. Но такое подключение может пригодится для временного пользования или для изучения реляционных баз данных.
Чтобы установить соединение с базой данных на компьютере, нужно указать путь к не. Если Python не найдет базу, то создаст ее сам. Чтобы создать базу в оперативной памяти, следует указать :memory:. Ниже показаны примеры.
# con = sqlite3.connect(":memory:") # в оперативной памяти
con = sqlite3.connect("mydb.db")
После установки соединения можно выполнять запросы к реляционной базе данных, синтаксис которых можно посмотреть в документации.
Совершение транзакций и закрытие соединения
После каждого выполнения запроса, требуется совершить транзакцию. В Python это реализуется через метод commit:
con.execute("ВАШ ЗАПРОС")
con.commit()
Можно избежать постоянного использования commit с помощью контекстного менеджера with:
with con:
    con.execute("ВАШ ЗАПРОС")
Выполнив все необходимые запросы, соединение следует закрыть напрямую:
con.close()
Cursor для совершения запросов и получения данных
Для совершения запросов можно использовать инициализированное соединение, как это написано выше через метод con.execute, либо с помощью объекта Cursor:
cur = con.cursor()
сur.execute("ВАШ ЗАПРОС")
Преимуществом использования объекта Cursor является возможность получить данные без включения дополнительного кода на Python.
Безопасные запросы
В качестве значений при добавлении данных используется знак ? или :value. Не следует писать запрос с использованием строковых операций (format или f-stirng), так это небезопасно и может быть подвергнута атакам c внедрением SQL-кода (SQL-injection). Ниже показаны примеры безопасного и небезопасного запроса на Python.
# НЕ делайте этого:
name = 'Vova'
cur.execute("SELECT * FROM user WHERE name = '%s'" % name)
# Так лучше:
name = ('Vova',)
cur.execute("SELECT * FROM user WHERE name=?", name)
# Так тоже хорошо:
name = {'n': 'Vova'}
cur.execute("SELECT * FROM user WHERE name=:n", name)
Обратите внимание, что знак ? требует в качестве значения кортеж (tuple), а :value — словарь (dict).
В следующей статье мы рассмотрим на конкретном примере создание таблиц БД и выполнение запросов к ним. А получить необходимый минимум для работы с базами данных в реальных проектах Data Science, вы можете на наших курсах по Python в лицензированном учебном центре обучения и повышения квалификации IT-специалистов в Москве.



