python-3.x - 使用 Pydantic 和 Motor 创建 ISODate
问题描述
我正在使用 FastAPI、Pydantic 和Motor创建一个简单的后端。这是 Python 中的数据模型描述:
from datetime import datetime, date
from pydantic import BaseModel, Field, validator
class ContactModel(BaseModel):
"""
Task MongoDB model: Ignoring _id since it use ObjectId
"""
firstname: str = Field(...)
surname: str = Field(...)
birthday: datetime
location: str = Field(...)
@validator("birthday", pre=True)
def parse_birthday(cls, value):
birthday = datetime.strptime(value, "%d-%m-%Y")
return birthday
POST 路由器的 FastAPI 函数是这样写的:
@router.post("/", response_description="Add new contact")
async def create_contact(request: Request, contact: ContactModel = Body(...)):
json_contact = jsonable_encoder(contact)
new_contact = await request.app.mongodb[collection].insert_one(json_contact)
created_contact = await request.app.mongodb[collection].find_one(
{"name": new_contact.inserted_id}
)
return JSONResponse(status_code=status.HTTP_201_CREATED, content=created_contact)
用我的后端发送一个新条目后,我的 Mongo Shell 的输出没有显示生日字段的 ISOData:
{ "_id" : ObjectId("60a126ec73407fc9aea5c1df"), "firstname" : "Andy", "surname" : "Gray", "birthday" : "2002-03-01T00:00:00", "location" : "Paris" }
我的实施有什么问题?一般来说,如果我只需要日期,为什么要使用 ISODate 而不是日期字符串?
解决方案
推荐阅读
- qt - QML:带边框的圆角矩形
- travis-ci - 从 travis CI 获取作业 ID 的日志文件
- rest - springboot keyclaok rest 调用服务器到服务器身份验证
- xslt-1.0 - 无界结构的元素中的值计数
- ios - 1x、2x 和 3x 的可用设备是什么
- node.js - 如何在 CouchDB 中使用运算符 OR?
- python - 在 Python 中查找数组中满足 inf < element < sup 的元素
- javascript - AngularJS-如何从 AngularJS 前端函数更改后端 Python 变量的值?
- jquery - jquery-bootstrap4Uncaught TypeError:无法读取未定义的属性“长度”
- .htaccess - htaccess ,从 sub.domain.com 转到 domainin.com