1

目前,我正在努力通过 fastapi 的 post call 传递 mongoengine 模型,该模型只接受迂腐模型。但是我已经在 mongoengine ODM 中编写了我的 mongo 模型。如果我尝试在 apis 中传递这些 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
4

1 回答 1

3

导入 mongoengine 和 uvicorn

from mongoengine import *
import uvicorn

创建一个 MongoDB 连接

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

声明一个类似于你的项目类的 MongoEngine 类

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

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

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

main.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
于 2020-12-07T10:04:32.147 回答