Как используется СУБД, встроенная в Python

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

Источники
  1. https://docs.python.org/3/library/sqlite3.html

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

Поиск по сайту