Задать вопрос
@kefirich

Как использовать pymongo асинхронно?

Всем привет! Я хочу изменить pymongo на motor (асинхронная версия pymongo). У меня есть такой код.

database.py
import motor.motor_asyncio
import os
from dotenv import load_dotenv
import asyncio

load_dotenv()

cluster = motor.motor_asyncio.AsyncIOMotorClient(os.environ['MONGO_URL'])
db = cluster[os.environ['DB_NAME']]

async def get_db(server_id, plugin):
	data = await db[plugin].find({'server_id': str(server_id)})
	#print(data)

	if not len(list(data)) > 1:
		return db[plugin].find_one({'server_id': str(server_id)})
	else:
		return db[plugin].find({'server_id': str(server_id)})


другие файлы, в которых примерно такой же код
async def update_rewards(self, server):
		plugin = database.get_db(server.id, 'levels')
		server_rewards = database.get_db(server.id, 'role_rewards')

		rewards = []
		if database.get_db(server.id, 'role_rewards'):
			if not type(database.get_db(server.id, 'role_rewards')) is dict:
				rewards_ = database.get_db(server.id, 'role_rewards')
				for reward in rewards_:
					print(reward)
					await rewards.append(reward)
			else:
				rewards.append(database.get_db(server.id, 'role_rewards'))


Ошибка
for reward in rewards_:
                  ^^^^^^^^
TypeError: 'coroutine' object is not iterable


Я не совсем понимаю как работает asyncio. можете помочь?
  • Вопрос задан
  • 155 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Everything_is_bad
Я не совсем понимаю как работает asyncio. можете помочь?
это так не работает. Перестать делать методом тыка и начни читать доки или учебник. Ну вот потыкать тебе в те же доки https://motor.readthedocs.io/en/stable/tutorial-as... но ты всё равно прибежишь с другим подобным вопросом.

await rewards.append(reward)
ну треш же
Ответ написан
Комментировать
Вызов корутины осуществляется с указанием ключевого слова await перед ней

https://docs.python.org/3/library/asyncio-task.html
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы