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.4.2.tar.gz (11.8 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.4.2-py3-none-any.whl (10.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: classic_sql_tools-0.4.2.tar.gz
  • Upload date:
  • Size: 11.8 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.4.2.tar.gz
Algorithm Hash digest
SHA256 ebad06fdc656e7a6c45a8af53bd6e765989a18c27535e0b3601389ba36882a5b
MD5 baef5cf3f00a45145c73ad1ec143eb17
BLAKE2b-256 de77e9273c65a4d96d84c9894ea872c11b1a613096cad933c15985feca21fc7b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for classic_sql_tools-0.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d9ff81e98ee954bf8887ab1ae9a91e13408f811a2b8522992a36b748bb7826a6
MD5 0bf0890ac0a08bc314c052c2c083bc97
BLAKE2b-256 6f09067956a8b711d939727bb56f3c19572748039ea4eb4fb9bab4b7a57bfed1

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