Skip to main content

No project description provided

Project description

Генерация 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))

Project details


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.3.1.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

classic_sql_tools-0.3.1-py3-none-any.whl (9.9 kB view details)

Uploaded Python 3

File details

Details for the file classic_sql_tools-0.3.1.tar.gz.

File metadata

  • Download URL: classic_sql_tools-0.3.1.tar.gz
  • Upload date:
  • Size: 11.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.13

File hashes

Hashes for classic_sql_tools-0.3.1.tar.gz
Algorithm Hash digest
SHA256 5b0429bf8b982eb5df3d4171088d97099ff959e232dfd025d03426089b183ba9
MD5 fe072a9365b63befc9d92526e923047e
BLAKE2b-256 b25bc661a6201961db9c30ee3ecad2b9aacc78e9119fc9053552bb79386ace2a

See more details on using hashes here.

File details

Details for the file classic_sql_tools-0.3.1-py3-none-any.whl.

File metadata

File hashes

Hashes for classic_sql_tools-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4bbbb5af74705acf0fa22ced07ab455e5d34b6439aa7ea8de0765870b4b21461
MD5 12ca09486f81ef3d7bcea87036d677bc
BLAKE2b-256 807139640efe287943f5b3e8b26c7cf18865a70918e63af4abdb0fa63ebbb926

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page