Базы данных являются неотъемлемой частью 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-специалистов в Москве.