Приветствую, друзья!
Сегодня у меня для вас незапланированная публикация.
В процессе работы над новой статьей из цикла по 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.
Надеюсь, что данная информация была вам полезной. Если это так, поддержите меня лайком, подпиской или комментарием. Ваше внимание и поддержка помогут мне продолжать выпускать полезные и универсальные библиотеки.
Благодарю за внимание!
ссылка на оригинал статьи https://habr.com/ru/articles/826434/
Добавить комментарий