SQL Assembly
Open-source инструмент для борьбы с дублированием SQL-кода через композицию переиспользуемых блоков.
Проблема
При работе со сложными аналитическими запросами часто возникают одинаковые CTE (Common Table Expressions), которые копируются между разными SQL-файлами. Это приводит к:
- дублированию кода
- сложностям при изменении логики
- ошибкам синхронизации
Решение
SQL Blocks Assembler позволяет декомпозировать SQL-запросы на переиспользуемые блоки с системой зависимостей.
Ключевые возможности
- 📦 Модульность - разбивайте запросы на логические блоки
- 🔄 Переиспользование - используйте одни и те же блоки в разных запросах
- 📐 Зависимости - автоматическое разрешение порядка выполнения через граф зависимостей
Быстрый старт
Установка
pip install sql-assembly
Пример использования
1. Создайте директорию sql_blocks
2. Создайте SQL блоки в директории sql_blocks
users.sql
-- name: "users_block"
SELECT
id,
name,
email
FROM users
WHERE active = true
sales.sql
-- name: "sales_b"
-- depends: "users_block"
SELECT
u.name,
s.amount,
s.date
FROM sales s
JOIN users_block u ON s.user_id = u.id -- зависит от блока "users_block"
3. Создайте билд ваших sql блоков
sql-assembly build
4. Использование
В консоле
> sql-assembly assembly sales_b
WITH
users_block AS (
SELECT
id,
name,
email
FROM users
WHERE active = true
),
sales_b AS (
SELECT
u.name,
s.amount,
s.date
FROM sales s
JOIN users_block u ON s.user_id = u.id -- зависит от блока
)
SELECT * FROM sales_b
В коде
from sqlblocks import SQLAssembler
assembler = SQLAssembler()
sql = assembler.assembly_sql("sales_b") # В sql будет лежать тот же выввод, что и выше
Архитектура
Основные компоненты
- SQLBlock - модель блока с зависимостями
- SQLBlockRegistry - реестр для управления блоками
- SQLAssembler - ядро для сборки запросов
- Плагины - система загрузки блоков
Поддерживаемые плагины
- ✅ FolderPlugin - загрузка из файловой системы (пока ограничена настройка)
- 🔄 In progress: БД, REST API, словари
Текущий статус
🚧 Активная разработка - проект в стадии альфа-тестирования. Основной функционал работает, API может меняться.
Вклад в разработку
Любые предложения и pull requests приветствуются!
Лицензия
📄 MIT License - свободная лицензия с минимальными ограничениями.
Разрешает использование, модификацию и распространение кода в коммерческих и некоммерческих целях.
Полный текст лицензии доступен в файле LICENSE.
Release files for sql-assembly 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sql_assembly-0.1.1.tar.gz | 4.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sql_assembly-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 9.8 kB
Release files / sql_assembly-0.1.1.tar.gz
| Download URL | sql_assembly-0.1.1.tar.gz |
|---|---|
| Size | 4.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2eac96c626e2414a5c247ad35baa97106f1e6196f8e5df080bc6c594f5f3e268
|
|
BLAKE2b-256 checksum How to use checksums |
10b553943e4fccee6c87100a0e47f1e6d07b9b5b9ac9d0bd8579ab05037c3289
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|
Release files / sql_assembly-0.1.1-py3-none-any.whl
| Download URL | sql_assembly-0.1.1-py3-none-any.whl |
|---|---|
| Size | 5.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
049db2891be0dc7fecb098c2b719d085ff0d8886eac18ee0af7db76c8c239800
|
|
BLAKE2b-256 checksum How to use checksums |
85bb8f0ae73410100701801d1866d7099827abf735093028519b4e7db779327b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|