classic-db-tools


Nameclassic-db-tools JSON
Version 0.0.5 PyPI version JSON
download
home_pageNone
SummaryClassic DB tools
upload_time2025-10-22 06:45:20
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseNone
keywords jinja2 sql python template
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Classic DB Tools

Идея библиотеки заключается в попытке работать с SQL-запросами как с шаблонами Jinja.
Вдохновлено [embrace](https://pypi.org/project/embrace/) и 
[jinjasql](https://pypi.org/project/jinjasql/), оттуда же бралась часть кода.

## Установка:
```shell
pip install classic-db-tools
```

## Quickstart:

```python
from classic.db_tools import Engine, ConnectionPool
import psycopg

pool = ConnectionPool(psycopg.connect)
engine = Engine('path/to/sql/templates/dir', pool)

# При входе движок займет соединение в пуле,
# на выходе, по дефолту, закоммитит
with engine:
    # Применим схему:
    engine.query_from('tasks/ddl.sql').execute()

    # Сохранение данных
    engine.query_from('tasks/save.sql').executemany([
        {'title': 'Some Task', 'body': 'Do something'},
        {'title': 'Another Task', 'body': 'Do anything'},
    ])

    # Получение данных
    task = engine.query_from('tasks/get_by_id.sql').one(id=1)
    # (1, 'Some Task', 'Do something')
```

В директории sql рядом с .py файлом надо разместить 3 файла
(можно найти в директории test/example):

`sql/tasks/ddl.sql`:
```sql
CREATE TABLE tasks (
    id serial PRIMARY KEY,
    title text,
    body text
);
```

`sql/tasks/get_by_id.sql`:
```sql
SELECT id, title, body FROM tasks WHERE id = %(id)s;
```

`sql/tasks/save.sql`:
```sql
INSERT INTO tasks (title, body) VALUES (%(title)s, %(body)s);
```

## Возможности

### Управление коннектом и транзакциями

### Выполнение из файла и напрямую

### Статические запросы

### Динамические запросы

### Выдача значений

### Маппинг

#### Маппинг на классы

#### Маппинг на словари

#### Кастомные идентификаторы

#### Композитные ключи

### Отложенные операции

### ScopedConnection

### Transaction

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "classic-db-tools",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "Jinja2, SQL, Python, Template",
    "author": null,
    "author_email": "Sergey Variasov <variasov@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/d7/96/c892ff8b4306ea6a921402e9d2a236817338c1c9955cc912852564c2a2ae/classic_db_tools-0.0.5.tar.gz",
    "platform": null,
    "description": "# Classic DB Tools\n\n\u0418\u0434\u0435\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u043a\u0430\u043a \u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c\u0438 Jinja.\n\u0412\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u0435\u043d\u043e [embrace](https://pypi.org/project/embrace/) \u0438 \n[jinjasql](https://pypi.org/project/jinjasql/), \u043e\u0442\u0442\u0443\u0434\u0430 \u0436\u0435 \u0431\u0440\u0430\u043b\u0430\u0441\u044c \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0434\u0430.\n\n## \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430:\n```shell\npip install classic-db-tools\n```\n\n## Quickstart:\n\n```python\nfrom classic.db_tools import Engine, ConnectionPool\nimport psycopg\n\npool = ConnectionPool(psycopg.connect)\nengine = Engine('path/to/sql/templates/dir', pool)\n\n# \u041f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0434\u0432\u0438\u0436\u043e\u043a \u0437\u0430\u0439\u043c\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0432 \u043f\u0443\u043b\u0435,\n# \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435, \u043f\u043e \u0434\u0435\u0444\u043e\u043b\u0442\u0443, \u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0442\u0438\u0442\nwith engine:\n    # \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u0441\u0445\u0435\u043c\u0443:\n    engine.query_from('tasks/ddl.sql').execute()\n\n    # \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445\n    engine.query_from('tasks/save.sql').executemany([\n        {'title': 'Some Task', 'body': 'Do something'},\n        {'title': 'Another Task', 'body': 'Do anything'},\n    ])\n\n    # \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445\n    task = engine.query_from('tasks/get_by_id.sql').one(id=1)\n    # (1, 'Some Task', 'Do something')\n```\n\n\u0412 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 sql \u0440\u044f\u0434\u043e\u043c \u0441 .py \u0444\u0430\u0439\u043b\u043e\u043c \u043d\u0430\u0434\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c 3 \u0444\u0430\u0439\u043b\u0430\n(\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 test/example):\n\n`sql/tasks/ddl.sql`:\n```sql\nCREATE TABLE tasks (\n    id serial PRIMARY KEY,\n    title text,\n    body text\n);\n```\n\n`sql/tasks/get_by_id.sql`:\n```sql\nSELECT id, title, body FROM tasks WHERE id = %(id)s;\n```\n\n`sql/tasks/save.sql`:\n```sql\nINSERT INTO tasks (title, body) VALUES (%(title)s, %(body)s);\n```\n\n## \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438\n\n### \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u043c \u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u043c\u0438\n\n### \u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e\n\n### \u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b\n\n### \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b\n\n### \u0412\u044b\u0434\u0430\u0447\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439\n\n### \u041c\u0430\u043f\u043f\u0438\u043d\u0433\n\n#### \u041c\u0430\u043f\u043f\u0438\u043d\u0433 \u043d\u0430 \u043a\u043b\u0430\u0441\u0441\u044b\n\n#### \u041c\u0430\u043f\u043f\u0438\u043d\u0433 \u043d\u0430 \u0441\u043b\u043e\u0432\u0430\u0440\u0438\n\n#### \u041a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b\n\n#### \u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0442\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u0438\n\n### \u041e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438\n\n### ScopedConnection\n\n### Transaction\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Classic DB tools",
    "version": "0.0.5",
    "project_urls": {
        "Homepage": "https://github.com/variasov/classic-db-tools"
    },
    "split_keywords": [
        "jinja2",
        " sql",
        " python",
        " template"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1b703b9f78af3dde0c641a21e34428eda788d811d7e36eb617d8c1dca9587be4",
                "md5": "2ab6603ee1181bbb304cd72ee03e91e1",
                "sha256": "013b38e406c8900c2878d5b75b3788f20bbaf5b32a9bcb51e925bc22976700dd"
            },
            "downloads": -1,
            "filename": "classic_db_tools-0.0.5-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "2ab6603ee1181bbb304cd72ee03e91e1",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 21823,
            "upload_time": "2025-10-22T06:45:19",
            "upload_time_iso_8601": "2025-10-22T06:45:19.185046Z",
            "url": "https://files.pythonhosted.org/packages/1b/70/3b9f78af3dde0c641a21e34428eda788d811d7e36eb617d8c1dca9587be4/classic_db_tools-0.0.5-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d796c892ff8b4306ea6a921402e9d2a236817338c1c9955cc912852564c2a2ae",
                "md5": "d97bfaccfd0559881e597ac472190244",
                "sha256": "408d72d911e8a2899756ee63b74d4a0e9c14f32957778ee9cffbf53595c6bd9d"
            },
            "downloads": -1,
            "filename": "classic_db_tools-0.0.5.tar.gz",
            "has_sig": false,
            "md5_digest": "d97bfaccfd0559881e597ac472190244",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 21520,
            "upload_time": "2025-10-22T06:45:20",
            "upload_time_iso_8601": "2025-10-22T06:45:20.390993Z",
            "url": "https://files.pythonhosted.org/packages/d7/96/c892ff8b4306ea6a921402e9d2a236817338c1c9955cc912852564c2a2ae/classic_db_tools-0.0.5.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-22 06:45:20",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "variasov",
    "github_project": "classic-db-tools",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "classic-db-tools"
}
        
Elapsed time: 1.86797s