使用异步 Django ORM 的现代最佳方法?

Sco*_*ord 4 django python-asyncio django-channels

异步 Django 的世界正在迅速变化,很难分辨什么是当前的、什么是过时的。

那么,当前使用 Django ORM(或者可能是另一个 ORM)获得最佳/最流畅异步功能的最佳方法是什么?今天人们成功地使用了什么?

那里有很多参考资料,包括:

我遇到的一个问题是,无论我尝试什么,我都会遇到“django.db.utils.OperationalError:数据库“test_djangoasyncproj”正在被其他用户访问”问题。

kja*_*jaw 8

我认为你应该遵循文档 https://docs.djangoproject.com/en/4.0/topics/async/#asgiref.sync.sync_to_async https://docs.djangoproject.com/en/4.0/topics/async/#async - 意见

from asgiref.sync import sync_to_async

results = await sync_to_async(Blog.objects.get, thread_sensitive=True)(pk=123)
Run Code Online (Sandbox Code Playgroud)

或者

from asgiref.sync import sync_to_async

def _get_blog(pk):
    return Blog.objects.select_related('author').get(pk=pk)

get_blog = sync_to_async(_get_blog, thread_sensitive=True)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。这会起作用,但并不理想。它丑陋且笨拙,并且当 Django ORM 正确支持异步时肯定需要重构。 (9认同)