JSON declarative SQL conversion library
Project description
duckQL 🐥
duckQL is simple JSON-based notation for some SQL dialects (PostgreSQL, MariaDB, MySQL) based on pydantic library.
Example
Here is a simple example of library usage. For more examples please visit project page.
from duckql import Query, Property, Comparision, Constant
my_query = Query(
entity='users',
properties=[
Property(name='users.name'),
Property(name='users.surname')
],
conditions=Comparision(
properties=[
Property(name='users.age'),
Constant(value=15)
],
operation=Comparision.Operation.GREATER_EQUAL
)
)
{
"obj": "structures.Query",
"entity": "users",
"properties": [
{
"obj": "properties.Property",
"name": "users.name"
},
{
"obj": "properties.Property",
"name": "users.surname"
}
],
"conditions": {
"obj": "structures.Comparision",
"properties": [
{
"obj": "properties.Property",
"name": "users.age"
},
{
"obj": "properties.Constant",
"value": "15"
}
],
"operation": "gte"
}
}
SELECT users.name, users.surname FROM users WHERE (users.age >= 15);
Development
Project is using poetry and documentation is generated by MkDocs. If you want to generate documentation you need to follow these simple steps inside of your virtual environment:
poetry install
mkdocs build
Inside of your virtual environment, you can also use mkdocs serve
to create temporary auto-reload http server with
live docs.
We use pytest for unit tests and flake8 for code-style validation. You can execute tests inside of pipenv shell using these commands:
pytest -v .
: executes unit testspytest -v --flake8 .
: flake8 code-style tests
License
Made with ☕️ and ❤️ by Jakub Dubec & BACKBONE s.r.o.
Changelog
0.13.0 : 2022-06-09
- Added: Ability to use casting for
ORDER BY
property
0.12.1 : 2022-05-10
- Fixed: Corrected cast of JSON fields
0.12.0 : 2021-12-21
- Feature:
FirstValue
window function introduced - Feature: Positional
ArrayAgg
introduced
0.11.1 : 2021-12-14
- Change: Ability to cast to UUID
0.11.0 : 2021-12-10
- Feature: More benevolent type nesting
0.10.0 : 2021-11-30
- Feature:
Case
introduced (without docs, there was no time, sry, let's call it Easter Egg for a while)
0.9.1 : 2021-07-20
- Fix: Fixed problem with multiple properties in operations (I had to remove comparison property check)
0.9.0 : 2021-06-25
- Fix: Fixed nested conditions (
Operator
can contain anotherOperator
) - Change: Dropped Python 3.6 support
0.8.2 : 2020-10-15
- Fix: Use
->
instead of-->
0.8.1 : 2020-10-15
- Fix: Use
-->
operator in JSON lookup chaining in nested objects
0.8.0 : 2020-10-14
- Feature: Nested JSON fields
0.7.2 : 2020-08-28
- Fix: Use
->>
operator in JSON lookup instead of->
(cast result as text)
0.7.1 : 2020-08-27
- Fix: Use quotes in JSON column type keys in
Property
0.7.0 : 2020-08-27
- Feature: Now is possible to pass
Distinct
toCount
to haveCOUNT(DISTINCT property)
syntax in pSQL - Tests: Test for JSON column type in pSQL
0.6.1 : 2020-08-04
- Fix: Use native
typing.Literal
if possible (Python 3.8 compatibility fix)
0.6.0 : 2020-07-23
- Feature:
lower
function introduced - Feature:
upper
function introduced - Feature: pSQL
initcap
function introduced
0.5.0 : 2020-07-22
- Feature:
QueryFactory
supportingjson
,msgpack
andbson
- Feature: pSQL
unaccent
function introduced
0.4.0 : 2020-06-12
- Feature:
Extract.Unit.DAY
introduced - Feature:
CastOperator.DataType.REAL
introduced - Feature: pSQL
to_char
function introduced - Feature: pSQL
to_date
function introduced
0.3.0 : 2020-05-20
- Feature:
HAVING
support - Feature:
NOW()
support - Fix:
Comparision
allows to have everyBaseType
asproperties
- Fix: Interval value is quoted now
0.2.2 : 2020-04-16
- Change: Ability to pass
structures.Distinct
intofunctions.StringAgg
0.2.1 : 2020-04-09
- Fix: Fixed JOIN aliases
0.2.0 : 2020-04-09
Project renamed to duckql
, this is the first public release (development status modifier changed to beta).
- Change: Name changed to
duckql
- Change: Poetry as package manager
0.1.8 : 2020-04-07
- Feature: Subquery support
- Note: Changelog datetimes in ISO 8601 compatible
Y-m-d
format
0.1.7 : 2020-03-17
- Fix: Adding missing imports in
__init__.py
files inside of submodules - Change: Moved
__version__
from__init__.py
toversion.py
- Note: Development status change to Alpha
0.1.6 : 2020-03-13
- Feature: Introduced
functions.StringAgg
- Feature: Introduced
structures.CastOperator
- Feature: CLI for parsing files
0.1.5 : 2020-02-05
- Change: Allow direct use of
structures.Comparision
in query conditions
0.1.4 : 2020-02-05
- Fix: Allow aliases in
structures.Query
- Change: Do not escape
%
0.1.3 : 2020-02-03
- Feature: Natural join support
0.1.2 : 2020-02-03
- Change: Completed docs
- Feature: Recursive nested properties lookup in
Query
object
0.1.1 : 2020-02-26
- Change: Default values for optional attributes in
structures.Query
- Change:
custom_parser
now can raiseParseError
if there is invalid object type passed
0.1.0 : 2020-02-26
- Initial release
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
File details
Details for the file duckql-0.13.0.tar.gz
.
File metadata
- Download URL: duckql-0.13.0.tar.gz
- Upload date:
- Size: 17.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 034abde7c3ebe36aee71be992e237f1182dde52da0e9024481da44d037a73339 |
|
MD5 | 7804f371f390aeaca7c12b0334bb5b3f |
|
BLAKE2b-256 | fdc996100809e8850742d990625df85a018b514f438c2553f2d8c206b2f5ad05 |
File details
Details for the file duckql-0.13.0-py3-none-any.whl
.
File metadata
- Download URL: duckql-0.13.0-py3-none-any.whl
- Upload date:
- Size: 31.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f25a9e1d26c6efdd090bba6e0c5fdecfecd0b5dc4842bf53ba577c4481582ccc |
|
MD5 | 133e0c5227c450789c2527dfb9eaf0e5 |
|
BLAKE2b-256 | 474578750b6e3b587886156b934f1373ac5e30d4c3f6c121021cccf481b9f875 |