
Security News
Bun 1.2.19 Adds Isolated Installs for Better Monorepo Support
Bun 1.2.19 introduces isolated installs for smoother monorepo workflows, along with performance boosts, new tooling, and key compatibility fixes.
.. image:: https://img.shields.io/pypi/v/iterable_orm.svg :target: https://pypi.python.org/pypi/iterable_orm :alt: Latest PyPI version
.. image:: https://travis-ci.org/Said007/iterable_orm.svg?branch=master :target: https://travis-ci.org/Said007/iterable_orm :alt: Latest Travis CI build status
Iterable_orm allows you to filter, exclude and sort data using similer API provided by Django ORM. The data needs to be a list of objects or dictionary. Python 2 & 3 is supported.
Iterable_orm gives you the following API
filter - Returns a new list of objects or dictionaries that match the given lookup parameters
exclude - Returns a new list of objects or dictionaries that do not match the given lookup parameters
get - Returns a single object or dictionary if there's two matches returns an exception
order_by - Returns a list ordered objects or dictionaries
first - Returns the first object or dictionary of filtered or exlcude data
last - Returns the first object or dictionary of filtered or exlcude data
count - Returns a lenth of filtered or exlcude or dictionaries
Please note that Iterable_orm does not support Q like objects offered by Django ORM, but offers a way around by passing anonymous function to filter or exclude function e.g manager.filter(age=lambda x: x >= 20 and x <= 30)
Pass a list of objects or dictionary to Queryset
.. code:: python
from iterable_orm import QuerySet
Accounts = [ A list of account objects that have attrubtes such as name, email, age, gender ect ]
manager = Queryset(Accounts)
You can filter and exclude data by value or lookups, such as gt, gte, lt, lte, startswith, istartswith, endswith, contains, icontains, value_in, value_not_in, value_range, date_range(expects a datetime object) or anonymous function.
iterable_orm also allows you to filter related objects using the standard double-underscore notation to separate related fields, e.g manager.filter(parent__name='John'), this filters by parent.child == 'John'.
All filtering and exlcuding are lazy so you can construct as many filtering as you like and its only evaluated on iterating, calling count, first, last and order_by.
Below are code examples of filtering and excluding,
.. code:: python
from iterable_orm import QuerySet
Accounts = [A list of account objects that have attrubtes such as name, email, age, gender ect ]
manager = Queryset(Accounts)
# Filter accounts with age greater than 25 and exclude if gender is male
data = manager.filter(age__gt=20).exclude(gender='male')
# Filter using lamda
data = manager.filter(age=lambda x: x >= 20 and x <= 30).exclude(gender='male')
# Filter accounts with the name starting with letter 's' and gender is female
data = manager.filter(name__istartswith='s').exclude(gender='female')
data = manager.filter(registered__date_range=(datetime.today().replace(year=2014), datetime.today().replace(year=2016))).exclude(gender='female')
data = manager.filter(registered__date_range=('01-01-2015', '01-01-2016')).exclude(gender='female')
You can filter data by value or lookups, such as gt, gte ect.
Below are code examples of filtering,
.. code:: python
from iterable_orm import QuerySet
Accounts = [A list of account objects that have attrubtes such as name, email, age, gender ect ]
manager = Queryset(Accounts)
# Filter accounts with age greater that 25
data = manager.filter(age__gt=20)
# Filter accounts with age less that 25 and who are a male
data = manager.filter(age__lt=20, gender='male')
# Get number of accounts with age 20 and who are a female
data = manager.filter(age__gt=20, gender='female').count()
# Filter accounts with name starting with letter 's'
data = manager.filter(name__istartswith='s')
data = manager.filter(registered__date_range=('01-01-2015', '01-01-2016'))
data = manager.filter(friends__gender='male')
data = manager.filter(registered__value_range=('2015-11-15', '2015-11-16')
data = manager.filter(name__istartswith='s').filter(gender='male')
You can Exclude data by value or lookups such as gt, gte ect. Below are code examples of exlcude function:
.. code:: python
from iterable_orm import QuerySet
Accounts = [A list of account objects that have attrubtes such as name, email, age, gender ect ]
manager = Queryset(Accounts)
# Exclude accounts with age greater that 25
data = manager.exclude(age__gt=20)
# Exclude accounts with age less then 25 and who are a male
data = manager.exclude(age__lt=20, gender='male')
# Exclude accounts with name starting with letter 's'
data = manager.filter(name__istartswith='s')
data = manager.exclude(registered__date_range=('01-01-2015', '01-01-2016'))
data = manager.filter(friends__gender='male')
data = manager.exclude(name__istartswith='s').exclude(gender='male')
You can order data by any value of object or dictionary :
.. code:: python
from iterable_orm import QuerySet
Accounts = [A list of account objects that have attrubtes such as name, email, age, gender ect ]
manager = Queryset(Accounts)
# Order by name
data = manager.order_by('name)
# Order name by descending
data = manager.order_by('-name)
# Ordering by related lookup of friends name
data = manager.order_by('friends__name')
# Ordering by related lookup of friends name descending
data = manager.order_by('-friends__name')
Unit test inlcudes full example usage of the API
To tun unit test run:
.. code:: python
python test.py
Install the latest release with:
::
pip install iterable_orm
Python 2.7, 3.0 to 3.5
FAQs
Query API similar to Django for Python objects and dictionaries
We found that iterable_orm demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Bun 1.2.19 introduces isolated installs for smoother monorepo workflows, along with performance boosts, new tooling, and key compatibility fixes.
Security News
Popular npm packages like eslint-config-prettier were compromised after a phishing attack stole a maintainer’s token, spreading malicious updates.
Security News
/Research
A phishing attack targeted developers using a typosquatted npm domain (npnjs.com) to steal credentials via fake login pages - watch out for similar scams.