/django-async-orm

Bringing Async Capabilities to django ORM

Primary LanguagePythonMIT LicenseMIT

Downloads

Disclaimer: Don't use this module in production it's still in active development.

Django Async Orm

Django module that brings async to django ORM.

Installing

python -m pip install django-async-orm

then add django_async_orm to your INSTALLED_APPS list:

INSTALLED_APPS = [
    ...,
    'django_async_orm'
]

Usage

Django Async Orm will patch all your existing models to add async_* prefixed methods.

note: Only non-existing methods will be patched.

example:

class MyModel(models.Model):
    name = models.CharField(max_length=250)

you can use it as follow:

async def get_model():
    return await  MyModel.objects.aget(name="something")

you can also iterate over a query set with async for:

async def all_models():
    all_result_set = await MyModel.objects.aall()
    async for obj in all_result_set:
        print(obj)

Some wrappers are also available for template rendering, form validation and login/logout

Async login

from django_async_orm.wrappers import alogin

async def my_async_view(request):
    await alogin(request)
    ...

Form validation

from django_async_orm.wrappers import aform_is_valid
async def a_view(request):
    form = MyForm(request.POST)
    is_valid_form = await aform_is_valid(form)
    if is_valid_form:
        ...

Django ORM support:

This is an on going projects, not all model methods are ported.

Manager:

methods supported comments
Model.objects.aget
Model.objects.acreate
Model.objects.acount
Model.objects.anone
Model.objects.abulk_create
Model.objects.abulk_update
Model.objects.aget_or_create
Model.objects.aupdate_or_create
Model.objects.aearliest
Model.objects.alatest
Model.objects.afirst
Model.objects.alast
Model.objects.ain_bulk
Model.objects.adelete
Model.objects.aupdate
Model.objects.aexists
Model.objects.aexplain
Model.objects.araw
Model.objects.aall
Model.objects.afilter
Model.objects.aexclude
Model.objects.acomplex_filter
Model.objects.aunion
Model.objects.aintersection
Model.objects.adifference
Model.objects.aselect_for_update
Model.objects.aprefetch_related
Model.objects.aannotate
Model.objects.aorder_by
Model.objects.adistinct
Model.objects.adifference
Model.objects.aextra
Model.objects.areverse
Model.objects.adefer
Model.objects.aonly
Model.objects.ausing
Model.objects.aresolve_expression
Model.objects.aordered
__aiter__
__repr__
__len__
__getitem__
Model.objects.aiterator

RawQuerySet

Not supported ❌

You can still call Model.object.araw() but you will be unable to access the results.

Model:

methods supported comments
Model.asave
Model.aupdate
Model.adelete
...

User Model / Manager

methods supported comments
User.is_authenticated
User.is_super_user
User.objects.acreate_user
...

Foreign object lazy loading:

Not supported ❌

Wrappers:

methods supported comments
arender
alogin
alogout