python - 在 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.
有没有办法做到这一点?任何建议表示赞赏!
解决方案
database_sync_to_async
必须在方法上调用,而不是在方法的结果上调用:
key_query = await database_sync_to_async(keys.objects.get)(key=key)
推荐阅读
- java - Apache 光束窗口:考虑延迟数据但只发出一个窗格
- c - C中的指针逻辑练习
- python-3.x - Google Colaboratory:OSError:[Errno 5] 输入/输出错误
- javascript - 将 jsonwebtoken 解码为 json 对象
- python - Python中的分位数回归与R中的结果不同
- json - 给定多个 JSON 实例文件,如何推断单个 JSON 模式?
- php - 使用常量作为函数属性
- angular - Angular 7 ng-if="" 组合条件
- mysql - 在 group by 之后检查每组的两列是否相同
- r - 同一数据框中的多个线性模型