Генерация SQL-запросов используя Jinja-шаблон
Идея библиотеки заключается в попытке работать с SQL-запросами как с шаблонами Jinja. Вдохновлено embrace и jinjasql, оттуда же бралась часть кода.
Установка:
pip install classic-sql-tools
Quickstart:
from classic.sql_tools import Module
import psycopg
# Модуль - точка входа во все функции библиотеки.
# При инстанцировании запоминает указанный путь,
# дальнейшие обращения будут
queries = Module('path/to/sql/templates/dir')
# Создадим подключение к БД
conn = psycopg.connect('posgresql:///some_db')
# Применим схему:
queries.tasks.ddl(conn)
# Сохранение данных
queries.tasks.save_task(conn, [
{'title': 'Some Task', 'body': 'Do something'},
{'title': 'Another Task', 'body': 'Do anything'},
])
# Получение данных
task = queries.tasks.get_by_id(conn, id=1).one()
# (1, 'Some Task', 'Do something')
В директории sql рядом с .py файлом надо разместить 3 файла (можно найти в директории test/example):
sql/tasks/ddl.sql:
CREATE TABLE tasks (
id serial PRIMARY KEY,
title text,
body text
);
sql/tasks/get_by_id.sql:
SELECT id, title, body FROM tasks WHERE id = {{ id }};
sql/tasks/save_task.sql:
INSERT INTO tasks (title, body) VALUES ({{ title }}, {{ body }});
Возможности
# Класс Module - точка входа во все функции библиотеки.
from classic.sql_tools import Module
# При инстанцировании ему обязательно нужно
# передать путь до директории с шаблонами.
queries = Module('path/to/sql')
# Затем можно получить шаблон запроса, лежащего,
# например, в `./sql/some_file.sql`:
query = queries.some_file
# Module поддерживает обращение имен директорий в Python.
# То есть объект-запрос можно получить,
# обратившись к атрибуту Module с названием директории.
# Например, файл, лежащий в `./sql/some_dir/some_file.sql`:
query = queries.some_dir.some_file
#Вложенность может быть любой:
query = queries.some_dir.another_dir.etc.some_file
#Также можно получить объект запроса,
#напрямую обратившись по его относительному пути:
query = queries.from_file('sql/some_dir/some_file.sql')
# И можно получить объект запроса из строкового литерала:
query = queries.from_str('SELECT id FROM tasks')
# После получения объект запроса можно выполнить
# с использованием соединения или курсора:
import psycopg
conn = psycopg.connect('posgresql:///some_db')
result = queries.tasks.get_by_id(conn)
# Либо
cursor = conn.cursor()
result = queries.tasks.get_by_id(cursor)
# Также можно выполнить запрос через метод .execute:
query = queries.tasks.get_by_id
query.execute(conn)
# Объект результата нужен для удобного представления
# результатов запроса. У него есть методы для представления набора строк,
# единичных строк и единичных значений -
# .many(), .one() и .scalar() соответственно
# Вернет список кортежей:
result = queries.from_str('SELECT * FROM tasks').execute(conn)
print(result.many())
# Вернет до 100 строк. При повторном вызове вернет следующие 100:
result = queries.from_str('SELECT * FROM tasks').execute(conn)
print(result.many(100))
print(result.many(100))
# Вернет один кортеж или None:
result = queries.from_str(
'SELECT * FROM tasks WHERE id = 1'
).execute(conn)
print(result.one())
# Вернет один кортеж или исключение ValueError,
# если в БД ничего не нашлось:
result = queries.from_str('SELECT * FROM tasks WHERE id = 1').execute(conn)
print(result.one(raising=True))
# Вернет один кортеж или None:
result = queries.from_str(
'SELECT id FROM tasks WHERE id = 1'
).execute(conn).scalar()
print(result.scalar())
# Аналогично .one() вернет один кортеж или
# исключение ValueError, если в БД ничего не нашлось:
result = queries.from_str('SELECT id FROM tasks WHERE id = 1').execute(conn)
print(result.scalar(raising=True))
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
classic_sql_tools-0.4.4.tar.gz
(11.7 kB
view details)
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 classic_sql_tools-0.4.4.tar.gz.
File metadata
- Download URL: classic_sql_tools-0.4.4.tar.gz
- Upload date:
- Size: 11.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
107cde3d66145325933425026156694d73ce27297cc128c8f213cd0d70f1c949
|
|
| MD5 |
18f07c37103e362f8eb01b04922ef1d3
|
|
| BLAKE2b-256 |
4c120cb5f854cf0b77eadf8bd1387308e19bebdabb51f4b68893d333bbf4e89a
|
File details
Details for the file classic_sql_tools-0.4.4-py3-none-any.whl.
File metadata
- Download URL: classic_sql_tools-0.4.4-py3-none-any.whl
- Upload date:
- Size: 10.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b906b0504fff8723f0559f0231d4b47817c092227feabbfbfc8571e0384943f6
|
|
| MD5 |
960b18a2ec76b01a6ed4a8b637159dce
|
|
| BLAKE2b-256 |
766631cda85e91847662deb2d01538c1117f860adeed96a0982c4aa0d9287bb7
|