https://github.com/bogdanp/hugs
Hugs lets you map SQL expressions to Python functions.
https://github.com/bogdanp/hugs
python sql
Last synced: 8 months ago
JSON representation
Hugs lets you map SQL expressions to Python functions.
- Host: GitHub
- URL: https://github.com/bogdanp/hugs
- Owner: Bogdanp
- License: bsd-3-clause
- Created: 2017-07-20T16:24:46.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2019-10-28T12:44:31.000Z (over 6 years ago)
- Last Synced: 2025-07-11T05:39:13.100Z (9 months ago)
- Topics: python, sql
- Language: Python
- Size: 26.4 KB
- Stars: 24
- Watchers: 4
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# hugs
[](https://travis-ci.org/Bogdanp/hugs)
[](https://badge.fury.io/py/hugs)
**hugs** lets you map SQL expressions to Python functions.
## Installation
pip install hugs
## Examples
### PostgreSQL
Write all your queries and commands in a plain `.sql` file. Command
names should end with a `!` character.
`queries.sql`:
``` sql
---
-- name: add_user!
-- args: username, password
-- doc: Adds a user.
INSERT INTO users (username, password) VALUES (%(username)s, %(password)s) RETURNING id;
---
-- name: get_users
SELECT * FROM users;
```
You can then point a `Repository` to that file to load it into memory:
`example.py`:
```python
import psycopg2
from hugs import Repository
connection = psycopg2.connect(database="postgres", user="bogdan")
connection.autocommit = True
users_repo = Repository()
users_repo.load_queries("queries.sql")
with connection.cursor() as cursor:
users_repo.add_user(cursor, "bogdan", "123")
users_repo.get_users(cursor)
print(cursor.fetchone())
connection.close()
```
You can use a `Manager` instead of (or in addition to) a `Repository`
to make iterating over query results less tedious.
```python
import psycopg2
from hugs import Manager
connection = psycopg2.connect(database="postgres", user="bogdan")
connection.autocommit = True
users_manager = Manager()
users_manager.load_queries("queries.sql")
with connection.cursor() as cursor:
users_manager.add_user(cursor, "bogdan", "123")
for user in users_manager.get_users(cursor):
print(user)
connection.close()
```
`Managers` optionally take a `value_factory` parameter that can be
used to convert rows to concrete data types.
```python
import psycopg2
from dataclasses import dataclass
@dataclass
class User:
id: Optional[int]
username: str
password: str
connection = psycopg2.connect(database="postgres", user="bogdan")
connection.autocommit = True
users_manager = Manager(User)
users_manager.load_queries("queries.sql")
with connection.cursor() as cursor:
for user in users_manager.get_users(cursor):
assert isinstance(user, User)
connection.close()
```
## License
hugs is licensed under the 3-clause BSD license.