如何在python(fastapi)中转换Pediatic Basemodel中的MongoEngine类



目前,我正努力通过只接受迂腐模型的fastapi在post调用中传递mongoengine模型。但我已经在mongoengine ODM中编写了我的mongo模型。如果我试图在api中传递这些mongoengine模型,那么它会抛出错误

from fastapi import FastAPI
from pydantic import BaseModel

class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None

app = FastAPI()

@app.post("/items/")
async def create_item(item: Item):
return item

进口mongoengine和uvicorn

from mongoengine import *
import uvicorn

创建MongoDB连接

DATABASE_URI = "mongodb://localhost:27017"
db=DATABASE_URI+"/mydatabase"
connect(host=db)

声明一个类似于您的Item类的MongoEngine类

class MongoItem(Document):
name=StringField()
description= StringField()
price=FloatField()
tax= FloatField()

添加一行代码以在MongoDB中存储项目

MongoItem(**item.dict()).save()

主.py的完整代码:

from fastapi import FastAPI
from pydantic import BaseModel
from mongoengine import *
import uvicorn

DATABASE_URI = "mongodb://localhost:27017"
db=DATABASE_URI+"/mydatabase"
connect(host=db)
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
class MongoItem(Document):
name=StringField()
description= StringField()
price=FloatField()
tax= FloatField()

app = FastAPI()

@app.post("/items/")
async def create_item(item: Item):
mongoitem=MongoItem(**item.dict()).save()
return item

if __name__ == "__main__":
uvicorn.run("main:app", host="127.0.0.1", port=8000, reload=True)

使用DynamicDocument类甚至更短

class MongoItem(DynamicDocument):
pass

最新更新