我正在努力弄清楚如何在监视器中使用uMongo,而且我遇到了一个问题。我无法让uMongo文档对象返回除None之外的任何其他内容,而且我确信这是显而易见的,我一直在忽略它。如果有人有任何建议或者看到一些我不知道的事情,请告诉我。
连接字符串被净化了,在我的代码中并不是这样的。
下面是我使用的测试文件:
import asyncio, pprint
from motor.motor_asyncio import AsyncIOMotorClient
from umongo import Document, Instance, fields
# plain motor connection
client = AsyncIOMotorClient('mongodb+srv://user:password@atlas.azure.mongodb.net')
db = client.my_database
# umongo motor connection
instance = Instance(db)
# umongo document object
@instance.register
class User(Document):
nickname = fields.StringField()
gender = fields.StringField()
class Meta:
collection = db.test
# plain motor query function
async def plain_motor_find_one():
document = await db.test.find_one({'nickname': 'rook'}) # this works
pprint.pprint(document)
# umongo motor query function
async def umongo_motor_find_one():
document = await User.find_one({'nickname': 'rook'}) # this does not and returns None
pprint(document)
# grab event loop
loop = asyncio.get_event_loop()
# make our calls
loop.run_until_complete(plain_motor_find_one())
loop.run_until_complete(umongo_motor_find_one())下面是我的database.test集合中的对象的样子:
{
"_id" : ObjectId("5e8b9c205ac19a8a91658f17"),
"nickname" : "rook",
"gender" : "male"
}非常感谢。
发布于 2022-05-02 08:58:18
如果要使用电动机和异步,请按照以下代码操作:
import asyncio
from motor.motor_asyncio import AsyncIOMotorClient
from umongo import Document, fields
from umongo.frameworks import MotorAsyncIOInstance
client = AsyncIOMotorClient('mongodb://localhost:27017')
db = client.shop
instance = MotorAsyncIOInstance(db)
@instance.register
class User(Document):
name = fields.StringField()
class Meta:
collection = db.user
async def plain_motor_find_one():
document = await User.find_one({'foo': 'bar'}) # now all methods are awaitable
print(document)
loop = asyncio.get_event_loop()
loop.run_until_complete(plain_motor_find_one())发布于 2022-09-14 07:11:23
问题在于这一部分:
# umongo motor connection
instance = Instance(db)umongo.Instace是一个抽象类,它用于实现,而不是直接使用。
您应该使用PymongoInstance和MotorAsyncIOInstance,它们分别是用于Pymongo和Motor驱动程序的Instance类的实现。
在这里,当您想要使用MotorAsyncIOInstance驱动程序时,应该使用Motor。
而不是上面的片段,使用下面的代码片段,它将完成任务。
from umongo.frameworks import MotorAsyncIOInstance
instance = MotorAsyncIOInstance(db)https://stackoverflow.com/questions/61069382
复制相似问题