python - 如何使用 python asyncio mongo 客户端电机列出数据库?
问题描述
我在使用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
专门用于此操作 - 但我不希望这样做。
解决方案
要列出所有数据库的名称,可以使用list_database_names:
client = motor.motor_asyncio.AsyncIOMotorClient()
dbs = await client.list_database_names()
print(dbs) # ["admin", "config", "local", "..."]
将光标移到数据库上,您需要使用list_databases。
client = motor.motor_asyncio.AsyncIOMotorClient()
cursor = await client.list_databases()
try:
while True:
db = await cursor.next()
print(db) # {'name': 'admin', 'sizeOnDisk': 40960, 'empty': False}, ...
except StopAsyncIteration:
pass
list_databases
您还可以使用listDatabases命令。
推荐阅读
- sql - 打印两个表中的所有字段,并使用 ORACLE CASE 语句根据列将某些列值设置为空
- logging - 使用 PutSQL 处理器登录 NiFi 时出错
- python - 使用线程/多进程从 API 加载时如何计算时间并设置时间限制?
- python - 如何在 django 类基础视图中注册后自动登录
- laravel - 如何在laravel中将值数组转换为字符串?
- python - 将数据从 JSON 输出到 Telegram
- javascript - 是否有必要在字符串数组和对象扩展运算符之间拆分 mapState?
- jquery - jQuery Modal - 在 Ajax 成功时从一个模态重定向到另一个模态
- wordpress - 竞争增值税验证器结帐 WooCommerce
- java - 为什么android的checkbox这么慢?