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 |