Приветствую, друзья!
Сегодня у меня для вас незапланированная публикация.
В процессе работы над новой статьей из цикла по FastAPI, я создавал примеры взаимодействия с базой данных через JSON, включая операции по извлечению, добавлению, изменению данных и другие.
В результате накопилось большое количество кода, который оказался избыточным, особенно с учётом того, что скоро я планирую перейти к описанию более серьёзного взаимодействия FastAPI с полноценной базой данных (SQLAlchemy с миграциями через Alembic). Поэтому я решил вынести весь код взаимодействия с JSON в отдельную библиотеку.
Так появилась json_db_lite.
Эта библиотека будет полезна в контексте FastAPI как отправная точка для знакомства с взаимодействием FastAPI и баз данных. В других проектах функционал json_db_lite также может оказаться весьма полезным.
Примеры Использования
Допустим, вам нужно парсить большой объем товаров с интернет-магазина (например, 5000 товаров). Категорий может быть много, и каждая категория имеет свои уникальные характеристики. На начальном этапе вы не знаете, какие характеристики собирать, а задача стоит в том, чтобы собрать всю возможную информацию по товарам.
Теперь вы можете спарсить весь сайт, собрав данные в формате JSON, не беспокоясь о количестве ключей в каждом словаре товара. После завершения сбора данных вы сможете легко вывести все данные, удалить ненужные ключи и записать их в стандартную SQL базу данных.
Если вы знакомы с NoSQL базами данных, такими как MongoDB, возможно, этот пример не будет для вас интересен. Однако я старался сделать библиотеку полезной для каждого, чтобы каждый нашел в ней что-то для себя.
Зачем Нужен JSON
Прежде чем мы приступим к установке библиотеки и разбору её синтаксиса, давайте разберемся, что такое JSON и зачем он нужен.
JSON (JavaScript Object Notation) — это стандартный текстовый формат для хранения и передачи структурированных данных. Он основан на синтаксисе объекта в JavaScript, но не привязан к этому языку.
Проще говоря, JSON — это основная структура данных, которая используется для общения между приложениями (клиентом и сервером). Благодаря удобной структуре "ключ — значение", JSON используется во всех языках программирования, хотя может называться по-разному. В Python, например, это словари (dict).
Возможности Библиотеки
json_db_lite позволяет:
Создавать JSON файл при инициализации класса (можно расценивать как создание базы данных).
Добавлять новые записи.
Получать все записи.
Очищать базу данных.
Удалять записи по ключу.
Обновлять записи по ключу.
Установка
Библиотека опубликована на PyPi, поэтому вы можете установить её с помощью следующей команды:
pip install --upgrade json_db_lite
Импорт и инициализация
from json_db_lite import JSONDatabase
# Инициализация базы данных
db_client = JSONDatabase('db.json')
После инициализации класса будет создан пустой JSON файл. Вы можете указать название файла или передать путь к папке, чтобы файл был создан там. Этот файл и будет являться вашей простой базой данных.
Примеры использования
Добавление данных
def add_data_to_db():
# массовое добавление
db_client.add_records([{"id": 1, "name": "Sara"},
{"id": 2, "name": "Mark"},
{"id": 3, "name": "Charlie"},
{"id": 4, "name": "David"}
])
# добавление одной записи
db_client.add_records({"id": 5, "name": "Alex"})
Метод принимает словарь или список словарей, добавляя записи в JSON.
Извлечение всех данных
def get_all_data():
# возвращаем все данные
return db_client.get_all_records()
Извлечение данных по конкретному ключу
def get_data(key='id', value=4):
# возвращаем данные по ключу
return db_client.find_records_by_key(key, value)
Функция возвращает список словарей, даже если возвращается одно значение.
Обновление данных
def update_data():
# обновляем данные по ключу у одного словаря
db_client.update_record_by_key(upd_filter={"id": 4}, new_data=[{"name": "Alex"}, {"age": 31}])
# обновляем данные по ключу у одного словаря
db_client.update_record_by_key(upd_filter={"name": "Alex"},
new_data=[{"age": 40}, {"job": "python developer"}])
Метод универсален. В качестве upd_filter
передается словарь формата "ключ-значение" для фильтрации. В new_data
можно передать список словарей или отдельный словарь. При отсутствии связки "ключ-значение", но при совпадении с фильтром, метод добавит новую связку. Если связка присутствует, то выполнит обновление.
Удаление записей
def dell_data():
# удаляем данные по ключу
db_client.delete_record_by_key(key="name", value="Alex")
После выполнения этого кода будут удалены все словари, у которых name = Alex
.
Очистка Базы Данных
def dell_all_data():
db_client.clear_database()
Заключение
Несмотря на свою простоту, библиотека получилась достаточно гибкой и универсальной. О новостях и обновлениях библиотеки я буду сообщать в своём телеграм-канале «Легкий путь в Python».
Репозиторий проекта на GitHub: JsonDatabase.
Надеюсь, что данная информация была вам полезной. Если это так, поддержите меня лайком, подпиской или комментарием. Ваше внимание и поддержка помогут мне продолжать выпускать полезные и универсальные библиотеки.
Благодарю за внимание!