https://github.com/linkdd/link.dbrequest
Database agnostic query system
https://github.com/linkdd/link.dbrequest
Last synced: about 1 year ago
JSON representation
Database agnostic query system
- Host: GitHub
- URL: https://github.com/linkdd/link.dbrequest
- Owner: linkdd
- Created: 2016-06-03T14:17:04.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2016-09-02T21:34:58.000Z (over 9 years ago)
- Last Synced: 2025-03-16T02:42:33.927Z (about 1 year ago)
- Language: Python
- Homepage:
- Size: 76.2 KB
- Stars: 0
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
Awesome Lists containing this project
README
link.dbrequest
==============
**link.dbrequest** is a database agnostic query system.
See documentation_ for more informations.
.. _documentation: https://linkdbrequest.readthedocs.io
.. image:: https://img.shields.io/pypi/l/link.dbrequest.svg?style=flat-square
:target: https://pypi.python.org/pypi/link.dbrequest/
:alt: License
.. image:: https://img.shields.io/pypi/status/link.dbrequest.svg?style=flat-square
:target: https://pypi.python.org/pypi/link.dbrequest/
:alt: Development Status
.. image:: https://img.shields.io/pypi/v/link.dbrequest.svg?style=flat-square
:target: https://pypi.python.org/pypi/link.dbrequest/
:alt: Latest release
.. image:: https://img.shields.io/pypi/pyversions/link.dbrequest.svg?style=flat-square
:target: https://pypi.python.org/pypi/link.dbrequest/
:alt: Supported Python versions
.. image:: https://img.shields.io/pypi/implementation/link.dbrequest.svg?style=flat-square
:target: https://pypi.python.org/pypi/link.dbrequest/
:alt: Supported Python implementations
.. image:: https://img.shields.io/pypi/wheel/link.dbrequest.svg?style=flat-square
:target: https://pypi.python.org/pypi/link.dbrequest
:alt: Download format
.. image:: https://travis-ci.org/linkdd/link.dbrequest.svg?branch=master&style=flat-square
:target: https://travis-ci.org/linkdd/link.dbrequest
:alt: Build status
.. image:: https://coveralls.io/repos/github/linkdd/link.dbrequest/badge.svg?style=flat-square
:target: https://coveralls.io/r/linkdd/link.dbrequest
:alt: Code test coverage
.. image:: https://img.shields.io/pypi/dm/link.dbrequest.svg?style=flat-square
:target: https://pypi.python.org/pypi/link.dbrequest/
:alt: Downloads
.. image:: https://landscape.io/github/linkdd/link.dbrequest/master/landscape.svg?style=flat-square
:target: https://landscape.io/github/linkdd/link.dbrequest/master
:alt: Code Health
Installation
------------
.. code-block:: text
pip install link.dbrequest
Features
--------
* database agnostic
* lazy query resolving
* cached queries
* queries are unique
Examples
--------
Getting a backend:
.. code-block:: python
from link.middleware.core import Middleware
# Will open a QueryManager using a MongoDB backend
manager = Middleware.get_middleware_by_uri('query+mongo://localhost:27107/mydatabase/mycollection')
# Will open a QueryManager using a SQL backend
manager = Middleware.get_middleware_by_uri('query+sql://localhost:5432/mydatabase/mytable')
Operations on the backend:
.. code-block:: python
from link.dbrequest.expression import E, F
from link.dbrequest.assignment import A
from link.dbrequest.comparison import C
query = manager.all() # get an iterable over all elements
manager.create(A('foo', 'bar')) # put document {'foo': 'bar'} into database
doc = manager.get(C('foo') != 'bar') # get single element, or None
Operations on queries:
.. code-block:: python
docs = list(query) # iterate over query to execute the request
docs = list(query) # use cache when iterating again
# create a new query from the first one
q2 = query.filter(C('foo') == 'bar')
assert query is not q2
# exclude documents without a field named "bar"
q3 = q2.exclude(~C('bar'))
# filter documents "weight > 5" and "prop1 < prop2 * 5"
q4 = q3.filter((C('weight') > 5) & (C('prop1') < (E('prop2') * 5)))
# set "prop3 = prop1 + prop2" on q2 result
docs = q2.update(A('prop3', E('prop1') + E('prop2')))
# delete documents
q3.delete()
Operations on documents:
.. code-block:: python
# save/delete a single document
doc.save()
doc.delete()
Donating
--------
.. image:: https://liberapay.com/assets/widgets/donate.svg
:target: https://liberapay.com/linkdd/donate
:alt: Support via Liberapay