Skip to main content

SQL Blocks

Open-source инструмент для борьбы с дублированием SQL-кода через композицию переиспользуемых блоков.

Проблема

При работе со сложными аналитическими запросами часто возникают одинаковые CTE (Common Table Expressions), которые копируются между разными SQL-файлами. Это приводит к:

  • дублированию кода
  • сложностям при изменении логики
  • ошибкам синхронизации

Решение

SQL Blocks Assembler позволяет декомпозировать SQL-запросы на переиспользуемые блоки с системой зависимостей.

Ключевые возможности

  • 📦 Модульность - разбивайте запросы на логические блоки
  • 🔄 Переиспользование - используйте одни и те же блоки в разных запросах
  • 📐 Зависимости - автоматическое разрешение порядка выполнения через граф зависимостей

Быстрый старт

Установка

pip install sql-dependency-manager

Пример использования

1. Создайте SQL блоки в файлах

blocks/users.sql

SELECT 
    id,
    name,
    email
FROM users 
WHERE active = true

blocks/sales.sql

SELECT
    u.name,
    s.amount,
    s.date
FROM monthly_sales s
JOIN users u ON s.user_id = u.id  -- зависит от блока 'users'

2. Используйте в коде:

from sqlblocks import BasicSQLBlock, SQLBlockRegistry, SQLAssembler
from sqlblocks.plugins.folder_plugin import FolderPlugin
from pathlib import Path

# 1. Инициализация
registry = SQLBlockRegistry()
plugin = FolderPlugin('/path/to/sql/blocks')
registry = SQLBlockRegistry()
sqlassembly = SQLAssembler(registry, plugin)

# 2. Инициализация SQL блоков
registry.add_block(BasicSQLBlock(
    name="users",
    depends=None,
    source="users.sql",
))
registry.add_block(BasicSQLBlock(
    name="sales",
    depends=("users",),
    source="sales.sql",
))

# 3. Компиляция 
query = sqlassembly.assemble_sql("main_block")

Результат

WITH
users AS (
    SELECT 
        id,
        name,
        email
    FROM users 
    WHERE active = true
)
SELECT
    u.name,
    s.amount,
    s.date
FROM sales s
JOIN users u ON s.user_id = u.id

Архитектура

Основные компоненты

  • SQLBlock - модель блока с зависимостями
  • SQLBlockRegistry - реестр для управления блоками
  • SQLAssembler - ядро для сборки запросов
  • Плагины - система загрузки блоков

Поддерживаемые плагины

  • ✅ FolderPlugin - загрузка из файловой системы
  • 🔄 In progress: БД, REST API, словари

Текущий статус

🚧 Активная разработка - проект в стадии альфа-тестирования. Основной функционал работает, API может меняться.

Вклад в разработку

Любые предложения и pull requests приветствуются!

Лицензия

📄 MIT License - свободная лицензия с минимальными ограничениями.
Разрешает использование, модификацию и распространение кода в коммерческих и некоммерческих целях.

Полный текст лицензии доступен в файле LICENSE.

Release files for sql-dependency-manager 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for sql-dependency-manager 0.1.1
File Interpreter ABI Platform
sql_dependency_manager-0.1.1-py3-none-any.whl Python 3 none any Details

Release files / sql_dependency_manager-0.1.1-py3-none-any.whl

Download URL sql_dependency_manager-0.1.1-py3-none-any.whl
Size 4.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a9bbaf6dfc6ce96f2e79c9b29111f4e761944fb1ca7fa0db78e128c8a61b52a2
BLAKE2b-256 checksum
How to use checksums
e1a3ebaa42e38f40a49eaa660fa6362fc58357052461ef203023cc42d94bcd62
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.9

Release history Release notifications | RSS feed

This release

0.1.1 This release

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page