将数据从Django Channel consumer保存到数据库

2024-10-01 22:42:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难编辑来自Django频道消费者的数据库条目,下面是涉及的代码片段:

class TestConsumer(AsyncJsonWebsocketConsumer):

    async def websocket_connect(self, event):
        ...
        key_query.active_connections = 2
        key_query.save()
        ...

由于我使用的是异步使用者,因此会出现以下错误:

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

如何从异步使用者执行此操作?也许使用@database_sync_to_async?任何建议都是非常感谢的


Tags: todjangokey代码数据库编辑async使用者
1条回答
网友
1楼 · 发布于 2024-10-01 22:42:27

在异步版本的WS中,您还应该将数据库访问转换为异步,因为它通常在同步模式下工作(我指的是数据库查询)。因此,您应该通过方法装饰器或其他提到here的方法来更改它

解决此问题的一种方法是使用如下方法和装饰器:

from channels.db import database_sync_to_async

@database_sync_to_async  # a method that goes in your TestConsumer class
def update_key_query(self):
    key_query = some_obj
    key_query.active_connections = 2
    key_query.save()

然后在需要时使用它,如下所示:

async def websocket_connect(self, event):
        ...
        await self.update_key_query()
        ...

相关问题 更多 >

    热门问题