A Python query builder inspired by Objection.js
Project description
Sustained.py
A Python query builder inspired by Objection.js.
Installation
python3 -m pip install sustained
Local Installation from Source
To install sustained from source for local development:
-
Clone the repository:
git clone https://github.com/wetherc/sustained.git cd sustained
-
Install in editable mode:
python3 -m pip install -e .
Usage
from sustained import Model, RelationType, create_model
class Person(Model):
database = 'my_db'
tableSchema = 'public'
tableName = 'persons'
class Animal(Model):
tableName = 'animals'
relationMappings = {
'owner': {
'relation': RelationType.BelongsToOneRelation,
'modelClass': Person,
'join': {
'from': 'animals.ownerId',
'to': 'persons.id'
}
}
}
# Build a query
query = Animal.query().select('animals.name', 'persons.name').leftOuterJoinRelated('owner')
print(query)
# SELECT animals.name, persons.name
# FROM animals
# LEFT OUTER JOIN persons
# ON animals.ownerId = persons.id
# Build a more complex query with a CTE and a raw join
active_owners = Person.query().select('id').where('status', '=', 'active')
query = (
Animal.query()
.with_('active_owners', active_owners)
.join('active_owners', 'animals.ownerId', '=', 'active_owners.id')
.select('animals.name')
)
print(query)
# WITH active_owners AS (
# SELECT id
# FROM persons
# WHERE status = 'active'
# )
# SELECT animals.name
# FROM animals
# JOIN active_owners
# ON animals.ownerId = active_owners.id
Development
This project uses pre-commit to enforce code quality and run tests before committing code.
Pre-commit Hooks Setup
-
Install pre-commit:
pip install pre-commit
-
Install the Git hooks: From the root of the project directory, run:
pre-commit install
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
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 sustained-1.1.0.tar.gz.
File metadata
- Download URL: sustained-1.1.0.tar.gz
- Upload date:
- Size: 46.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f614cb3d1f7f0851e1b778c2085a907da4f98df8101e66acfe7a7c0cec6c2c9e
|
|
| MD5 |
319f44830dd817fe175cd94073fac427
|
|
| BLAKE2b-256 |
aa9a0ac5cfd83513569a15495347eec1bc8b94fb30908fb004bc053cd2ea5efa
|
File details
Details for the file sustained-1.1.0-py3-none-any.whl.
File metadata
- Download URL: sustained-1.1.0-py3-none-any.whl
- Upload date:
- Size: 31.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
336ff76860657c10396fb2a78658da2b686e26c15ea7265393233643b7ed9062
|
|
| MD5 |
dcaed1676b414da23792242babd7c9cf
|
|
| BLAKE2b-256 |
68442396fab953016689716831f6cfe7fcdb963505cf70290560ee131ab7d7dd
|