目前,我正努力通过只接受迂腐模型的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