Resource Query Language to ORM
Project description
ReQueLa, your data assistant!
What is ReQueLa?
ReQueLa is a Python library that allows you to build complex queries to filter and order data in your database. Query are written using RQL, Resource Query Language, a query language expecially designed for RESTful resources.
Installation
pip install requela
Supported RQL operators
| Syntax | Explanation |
|---|---|
eq(field,value) |
Equal to |
ne(field,value) |
Not Equal to |
gt(field,value) |
Greater Than |
gte(field,value) |
Greater Than or Equal |
lt(field,value) |
Less Than |
lte(field,value) |
Less Than or Equal |
in(field,(value1,value2,...)) |
In list |
out(field,(value1,value2,...)) |
Not In list |
like(field,value) |
Like |
ilike(field,value) |
Case-insensitive Like |
and(expression1,expression2,...) |
Logical AND |
or(expression1,expression2,...) |
Logical OR |
not(expression) |
Logical NOT |
any(relationship,expression) |
ANY operator for to-many relationships |
order_by(field1,field2,...) |
Order By fields |
Examples
- Filtering:
and(eq(name,John),gt(age,30)) - Navigation through relationships using dot notation:
eq(account.name,My Account)to filter on a related field. - Filtering with ANY operator:
any(users,eq(users.name,John)) - Ordering:
order_by(name,age) - To order in descendant order, prefix the property name with a minus sign:
order_by(-age) - Combining filtering and ordering:
and(eq(name,John),gt(age,30))&order_by(name,age) - Using logical operators:
or(eq(name,John),eq(name,Jane))&order_by(name) - Using NOT operator:
not(eq(name,John))&order_by(name) - Using LIKE operator with wildcard symbol *:
like(name,*John*) - Using ILIKE operator with wildcard symbol *:
ilike(name,*John*)
Usage
Use QueryBuilder directly
SQLAlchemy
from requela import get_builder_for_model
from app.db import get_session
from app.models import MyModel
builder = get_builder_for_model(MyModel)
statement = builder.build_query("and(eq(name,John),gt(age,30))&order_by(name,-age)")
with get_session() as session:
result = session.execute(statement)
for model in result:
print(model)
Django
from requela import get_builder_for_model
from app.models import MyModel
builder = get_builder_for_model(MyModel)
result = builder.build_query("and(eq(name,John),gt(age,30))&order_by(name,-age)")
for model in result:
print(model)
Create a ModelRQLRules class
You can create a class to specify filtering and ordering rules for a given model like:
from requela import FieldRule, ModelRQLRules, Operator, RelationshipRules
from tests.django.models import Account, User
class AccountRules(ModelRQLRules):
__model__ = Account
name = FieldRule()
description = FieldRule()
status = FieldRule()
balance = FieldRule()
created_at = FieldRule(
alias="events.created.at",
)
class UserRules(ModelRQLRules):
__model__ = User
name = FieldRule()
age = FieldRule()
role = FieldRule(
allowed_operators=[Operator.IN, Operator.OUT],
)
is_active = FieldRule(allow_ordering=False)
birth_date = FieldRule(
alias="events.born.at",
)
account = RelationshipRules(rules=AccountRules())
rules = UserRules()
query = rules.build_query("and(eq(name,John),gt(age,30),eq(events.born.at,2024-01-01))&order_by(name,-age)")
License
ReQueLa is licensed under the Apache 2.0 License and is copyright SoftwareOne AG.
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 requela-0.1.4.tar.gz.
File metadata
- Download URL: requela-0.1.4.tar.gz
- Upload date:
- Size: 156.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ce2c25ad1eae4108d5730649c6c5c5576457ea30c3910f3a76020b570dcfbde
|
|
| MD5 |
e9b6989651b69cce4c1b61b7e1b65a07
|
|
| BLAKE2b-256 |
4f72b9d15653c4593a6410179c3e1aab44e6e5bddf6906dfdd16c604c5133ea5
|
Provenance
The following attestation bundles were made for requela-0.1.4.tar.gz:
Publisher:
on-release-main.yml on softwareone-platform/requela
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
requela-0.1.4.tar.gz -
Subject digest:
5ce2c25ad1eae4108d5730649c6c5c5576457ea30c3910f3a76020b570dcfbde - Sigstore transparency entry: 181391778
- Sigstore integration time:
-
Permalink:
softwareone-platform/requela@ccd39753008239f86e662da6f67cea84e21c7148 -
Branch / Tag:
refs/tags/0.1.4 - Owner: https://github.com/softwareone-platform
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
on-release-main.yml@ccd39753008239f86e662da6f67cea84e21c7148 -
Trigger Event:
release
-
Statement type:
File details
Details for the file requela-0.1.4-py3-none-any.whl.
File metadata
- Download URL: requela-0.1.4-py3-none-any.whl
- Upload date:
- Size: 21.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
edaa86d9af18c02a91b049a17490206836c71cb757c034efe14efaaed3ec301e
|
|
| MD5 |
fb1ab57f5b7b31265157c9067118aea0
|
|
| BLAKE2b-256 |
9bfeb46d078b1e8106af03705761cb0c82fe2eea3c5c6f420e8bf940e43d863a
|
Provenance
The following attestation bundles were made for requela-0.1.4-py3-none-any.whl:
Publisher:
on-release-main.yml on softwareone-platform/requela
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
requela-0.1.4-py3-none-any.whl -
Subject digest:
edaa86d9af18c02a91b049a17490206836c71cb757c034efe14efaaed3ec301e - Sigstore transparency entry: 181391780
- Sigstore integration time:
-
Permalink:
softwareone-platform/requela@ccd39753008239f86e662da6f67cea84e21c7148 -
Branch / Tag:
refs/tags/0.1.4 - Owner: https://github.com/softwareone-platform
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
on-release-main.yml@ccd39753008239f86e662da6f67cea84e21c7148 -
Trigger Event:
release
-
Statement type: