Это БАЗА (данных): Как подключиться и выполнить запрос?

В этой статье расскажем, какие есть базы данных и как правильно с ними работать: подключаться и делать запросы.

39 открытий299 показов
Это БАЗА (данных): Как подключиться и выполнить запрос?

Хотите заплатить хакерам $15 миллионов за свои данные?

Это не шутка. Именно такую сумму заплатила американская сеть казино Caesars Entertainment злоумышленникам, которые увели их БД.

База данных –– самое ценное, что есть у каждой компании. Именно в ней хранится вся чувствительная и важная для бизнеса информация. В этой статье расскажем, какие есть базы данных и как правильно с ними работать: подключаться и делать запросы.

Такие разные базы данных

Базы данных — основной инструмент программирования. БД хранят важную информацию о пользователях и позволяют этой информацией управлять.

Они делятся на два основных типа: реляционные и нереляционные.

Реляционная база — как большой шкаф с ящиками. У каждого своя подпись, и в нём лежат только определенные вещи по порядку. Например, один ящик для носков, второй для шапок, третий –– для носовых платков.

Все очень аккуратно, ничего не теряется, но если нужно что-то изменить, например, носки переложить в ящик с платками –– будет не так-то просто.

Чтобы делать запросы к реляционной базе, нужно использовать язык SQL. А обрабатывать эти запросы будет СУБД –– система управления базами данных. Простыми словами –– штука, которая помогает вам управлять самой базой. Что-то из шкафа вытащить, кого-то в него спрятать.

Нереляционная база данных — как огромная коробка, куда можно складывать всё, что угодно и как угодно. Это удобно, но для системы с чёткой структурой не подойдёт.

Какой тип БД выбрать для проекта –– зависит от целей компании, размера и особенностей бизнеса. Разберём каждый тип.

Реляционные базы данных (SQL)

Реляционные базы –– таблицы, где данные организованы в строки и столбцы. У каждой таблицы строгая схема, которая определяет типы данных и их взаимосвязь. Реляционные базы используются для приложений, где важны точность и согласованность информации.

Посмотрим на конкретные примеры.

MySQL

Очень популярная база с открытым исходным кодом. Она надежная, удобная и быстрая. MySQL часто используют для веб-приложений. Например, Airbnb, Netflix и Uber.

Её любят, потому что у неё качественная и подробная документация, а также большое сообщество.

PostgreSQL

Мощная и универсальная реляционная база данных, которая предлагает расширенные возможности. Среди них — работа с JSON, хранение массивов и поддержка пользовательских типов данных. Это делает PostgreSQL гибким инструментом для решения самых разнообразных задач.

СУБД используется в сложных приложениях, где важны высокая надежность и гибкий функционал.

SQLite

Эта однофайловая СУБД мало весит и не требует сервера для работы. Она идеально подходит для небольших приложений, мобильных устройств и тестирования.

Если нужно будет что-то куда-то переносить –– процесс пойдёт быстро. За эту простоту SQLite и любят.

Нереляционные базы

Нереляционные базы данных подходят для работы с большими объемами, которые могут быть неструктурированными или слабо структурированными.

В отличие от реляционных, у этих баз нет строгой схемы, что делает их гибкими и удобными для многих современных приложений.

Разберём самые популярные варианты нереляционных баз.

MongoDB

NoSQL-база данных, которая хранит данные в формате JSON, обеспечивает гибкость и простоту работы. MongoDB часто используется в приложениях, требующих динамической структуры данных, а также в учебных и небольших проектах благодаря своей доступности и лёгкости освоения.

Redis

Высокопроизводительная база данных, оптимизированная для минимизации задержек при доступе к данным. Идеально подходит для кэширования, управления сессиями, обработки очередей сообщений и других задач, требующих мгновенного отклика.

В чём разница между базами данных

Выбор базы данных — долгосрочное решение, от которого зависит эффективность работы вашего приложения. Давайте подробнее разберём различия между реляционными и нереляционными базами данных, чтобы помочь вам сделать осознанный и правильный выбор.

Структура данных

Это БАЗА (данных): Как подключиться и выполнить запрос? 1

Масштабируемость

Это БАЗА (данных): Как подключиться и выполнить запрос? 2

Скорость и производительность

Это БАЗА (данных): Как подключиться и выполнить запрос? 3
Выбор зависит от потребностей проекта: для сложных транзакционных систем с жесткой структурой данных лучше использовать реляционные базы, а для гибких, масштабируемых приложений с неструктурированными данными — нереляционные.

Для работы с базами данных важно уметь выполнять ключевые операции: извлечение, добавление, обновление и удаление данных. Разберём, что такое SQL-запросы и как выполнение этих операций отличается в реляционных и нереляционных базах данных.

Подключаемся к MySQL

Для реляционных баз данных используются стандартные операции:

  • SELECT — получить данные;
  • INSERT — добавить новые данные;
  • UPDATE — обновить существующие данные;
  • DELETE — удалить данные.

Поработаем с ними на примере MySQL. Представим, что у нас есть база с пользователями нашего блога. Чтобы поработать с ней, нужно настроить соединение с программой. Разберём этот процесс шаг за шагом.

Шаг 1. Устанавливаем библиотеку

Для работы с MySQL в Python нам понадобится библиотека mysql-connector-python.

Дла этого напишем команду в терминале:

			pip install mysql-connector-python
		

С помощью неё можно подключиться к базе, отправлять к ней запросы и обрабатывать результаты этих запросов.

Шаг 2. Настраиваем подключение

Чтобы подключиться к базе данных MySQL, необходимо знать её параметры:

  • Хост: адрес сервера, где находится база данных. Это может быть localhost;
  • Порт: номер порта для подключения. По умолчанию для MySQL — 3306-й порт;
  • Пользователь: имя пользователя, который имеет доступ к базе;
  • Пароль: пароль для этого пользователя;
  • Имя базы данных: конкретная база, с которой вы хотите работать.

Как это может выглядеть:

  • Хост: localhost
  • Порт: 3306
  • Пользователь: root
  • Пароль: “”
  • Имя базы данных: test_db

Шаг 3. Подключаемся к базе данных

Теперь создадим программу, которая установит соединение с MySQL.

			import mysql.connector

   # Подключаем к базе данных
connection = mysql.connector.connect(
       host="localhost",
       user="root",
       password="",
       database="test_db"
   )

if connection.is_connected():
       print("Успешно подключено к базе данных")
cursor = connection.cursor()

   # Выполним этот запрос и получим всех данных из таблицы users
fetch_all_query = "SELECT * FROM users"
cursor.execute(fetch_all_query)
result_all = cursor.fetchall()
print("Все данные:")
for row in result_all:
       print(row)

   # добавляем нового юзера
insert_query = "INSERT INTO users (name, email) VALUES (%s, %s)"
data_to_insert = ("John Doe", "john@gmail.com")
cursor.execute(insert_query, data_to_insert)
connection.commit()
print("Добавлено")

   # Удаляем этого же юзера
delete_query = "DELETE FROM users WHERE name = %s"
data_to_delete = ("John Doe",)
cursor.execute(delete_query, data_to_delete)
connection.commit()
print("Удалено")

   # Пытаемся получить одного пользователя
select_query = "SELECT * FROM users WHERE name = %s"
data_to_select = ("John Doe",)
cursor.execute(select_query, data_to_select)
result = cursor.fetchone()
print(f"Результат - {result}")

connection.close()
print("Соединение закрыто")
		

Что тут происходит:

  1. Импорт нужных библиотек: mysql.connector — это основной модуль для работы с MySQL в Python. Error — класс для обработки ошибок;
  2. Настройка подключения: Используем метод mysql.connector.connect, в который передаются параметры: host, user, password и database. Это наши настройки для базы данных;
  3. Проверка подключения:Метод is_connected() из переменной connection проверяет, удалось ли установить соединение;
  4. Выполнение запросов:Создаём курсор для выполнения SQL-запросов с помощью connection.cursor(). После этого можно делать запросы к базе. Выбираем конкретную базу, получаем все данные, добавляем в неё сущность, а затем удаляем её. Последний запрос — получение одного конкретного юзера;
  5. Закрытие соединения:Закрываем соединение с помощью метода connection.close() для того, чтобы избежать утечек ресурсов и проблем с безопасностью. 

Вы также можете обернуть код в try-except, чтобы отловить непредвиденные ошибки и не уронить сервер.

С помощью этого подхода можно быстро настроить подключение к MySQL и начать работу с базой данных в Python-проекте.

Подключаемся к MongoDB

Для нереляционных баз используем NoSQL-запросы. Функционал такой же: добавление, удаление, изменение и получение данных. А выглядят они по-другому. Посмотрим на примере MongoDB.

Для работы с MongoDB в Python используется библиотека pymongo. Разберём, как настроить соединение, выбрать базу данных и выполнить простой запрос.

Шаг 1. Устанавливаем библиотеку

Для начала установим библиотеку pymongo на своём компьютере. Введём команду в терминал:

			pip install pymongo
		

Шаг 2. Настраиваем подключение

Чтобы подключиться к MongoDB, нужно знать параметры базы:

  • Хост: адрес сервера;
  • Порт: порт, на котором работает MongoDB. По умолчанию — 27017;
  • Имя базы данных: название базы, которую вы хотите использовать;

MongoDB автоматически создаст базу данных, если она не существует.

Пример настроенной базы:

  • Хост: localhost
  • Порт: 27017
  • Имя базы данных: test_db

Шаг 3. Подключаемся и выполняем запрос

Нам нужно подключиться к базе данных MongoDB, добавить, удалить и получить данные коллекции:

			from pymongo import MongoClient



   # Создаем подключение к базе
client = MongoClient(host='localhost', port=27017)
print("Подключение к MongoDB успешно выполнено!")

   # Выбираем базу данных
db = client['test_db'] 
   # Выбираем коллекцию с юзерами
collection = db['users']

   # Добавление документа в коллекцию
user_data = {
       "name": "John Doe",
       "email": "johndoe@gmail.com"
   }  # Делаем этот запрос, чтобы выполнить добавление нового юзера
result = collection.insert_one(user_data)
print(f"Добавлен пользователь с ID: {result.inserted_id}")
  # Удаляем юзера
delete_result = collection.delete_one({"name": "John Doe"}) 
if delete_result.deleted_count > 0:
       print("Пользователь удалён.")
else:
       print("Пользователь не найден для удаления.")

   # Получаем одного юзера
user = collection.find_one({"name": "John Doe"})
if delete_result.deleted_count > 0:
       print(f"Найден пользователь: {user}")
else:
       print("Пользователь не найден для получения.")
   # Закрытие подключения
client.close()
print("Подключение к MongoDB закрыто.")
		

Разберём подробнее:

  1. Импорт библиотеки: Используем MongoClient из библиотеки pymongo, чтобы создать подключение к базе;
  2. Создание подключения: Используем данные хоста и порта, где запущен MongoDB;
  3. Выбор базы данных и коллекции: Выбираем нужную базу данных. В нашем случае –– test_db. Если базы нет, MongoDB создаст её при добавлении первого документа;
  4. Добавление документа: Добавляем новый документ с пользователем с помощью insert_one(). А также выводим в консоль информацию о добавленном пользователе;
  5. Удаление. Удаляем юзера и проверяем, получилось ли. Если нет, в консоли увидим запись, что такого юзера не существует;
  6. Выполнение запроса: Ищем только что добавленный документ методом find_one() и проверяем, нашли ли. Тут то же самое: если юзера нет, то в консоли мы это увидим;
  7. Закрытие подключения: Закрываем вызов через client.close() и оповещаем самих себя в консоли. 

Вы могли заметить, что мы везде заканчиваем код закрытием соединения. Это важно по нескольким причинам:

  1. Подключение к базе данных –– ресурсы сервера и клиента. Если соединение не закрыть, ресурсы останутся занятыми. Значит, их нельзя будет использовать для более нужных вещей;
  2. Неиспользуемые открытые соединения приводят к утечкам памяти;
  3. Открытое соединение может стать уязвимостью для атак, несанкционированного доступа или SQL-инъекций.

В этом фрагменте кода реализовано то же самое, но с улучшениями. Мы обернули его в блок try-except, чтобы защитить сервер от ошибок и предотвратить его аварийное завершение работы.

В этой статье мы лишь поверхностно коснулись темы баз данных. Если у вас ещё нет лишних денег на выкуп своих данных, рекомендуем инвестировать время в изучение основ и тонкостей работы с БД.

Качественно спроектированная база данных не только повысит эффективность и прибыльность бизнеса, но и защитит его от серьёзных рисков. Кроме того, вы значительно прокачаете свои навыки программирования.

Удачи в разработке и безопасности ваших данных! 🚀

Следите за новыми постами
Следите за новыми постами по любимым темам
39 открытий299 показов