SQL query assembler with dependency resolution for reusable code blocks
Project description
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sql_dependency_manager-0.1.1-py3-none-any.whl.
File metadata
- Download URL: sql_dependency_manager-0.1.1-py3-none-any.whl
- Upload date:
- Size: 4.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a9bbaf6dfc6ce96f2e79c9b29111f4e761944fb1ca7fa0db78e128c8a61b52a2
|
|
| MD5 |
11ddcf0609be921dd55e2f0bfde7b77d
|
|
| BLAKE2b-256 |
e1a3ebaa42e38f40a49eaa660fa6362fc58357052461ef203023cc42d94bcd62
|