首页 > 解决方案 > 在 Django 通道中执行数据库查询

问题描述

我正在尝试创建一个非常简单的系统,用户为了使用消费者,需要在 WS url 中输入一个键,例如 : ws://127.0.0.1:8000/main?key=KEY。一旦调用了消费者,Django Channels 需要执行一个非常简单的数据库查询来检查键是否存在:

class TestConsumer(AsyncJsonWebsocketConsumer):
    async def websocket_connect(self, event):
        ...
        key_query = await database_sync_to_async(keys.objects.get(key=key))
        ...

但是这段代码的问题是它会给出以下错误:

You cannot call this from an async context - use a thread or sync_to_async.

有没有办法做到这一点?任何建议表示赞赏!

标签: pythondjangodjango-channels

解决方案


database_sync_to_async必须在方法上调用,而不是在方法的结果上调用:

key_query = await database_sync_to_async(keys.objects.get)(key=key)

推荐阅读