Как получить список баз данных с помощью клиента python asyncio mon go, двигателя? - PullRequest
0 голосов
/ 02 августа 2020

У меня проблемы с получением двигателя для вывода списка баз данных с помощью asyncio.

Следующий код:

import asyncio
import motor.motor_asyncio
import sys

async def list():
    print(sys.version)
    print(motor.version)
    client = motor.motor_asyncio.AsyncIOMotorClient("mongodb://admin:password@mongo/")
    for db in client.list_databases():
        print(db)
        print(type(db))
        await db


loop = asyncio.get_event_loop()
loop.run_until_complete(list())

завершается с ошибкой

2.1.0
3.8.5 (default, Jul 21 2020, 10:48:26) 
[Clang 11.0.3 (clang-1103.0.32.62)]
<Future pending cb=[run_on_executor.<locals>._call_check_cancel() at /usr/local/lib/python3.8/site-packages/motor/frameworks/asyncio/__init__.py:80]>
<class '_asyncio.Future'>
Traceback (most recent call last):
  File "test.py", line 17, in <module>
    loop.run_until_complete(list())
  File "/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "test.py", line 13, in list
    await db
RuntimeError: await wasn't used with future

Я обнаружил эту проблему, которая кажется связанной с https://bugs.python.org/issue37172. Это также, похоже, не работает с python 3.7.7 и мотором 2.0.0.

В качестве ужасной работы на данный момент я использую pymongo исключительно для этой операции, но я бы предпочел не для этого.

...