我正在使用 FastAPI,创建一个 pydantic 模型,其中“日期”作为字段之一的名称。我注意到这会给出错误,生成的架构上显示的类型将为空。我找到了解决此问题的方法,但我想知道为什么我不能首先使用这个“日期”名称。
from datetime import date
from fastapi import FastAPI
from pydantic import BaseModel, Field
class Item(BaseModel):
# d: date = None # works fine
# date: date = None # does not work
d: date = Field(..., alias="date") # the workaround
app = FastAPI()
@app.post("/items/")
async def create_item(item: Item):
return item
Run Code Online (Sandbox Code Playgroud) 你好我正在使用Python 3.8
我正在实现一个带有修复列表的数据类,为了做到这一点,我有以下代码:
from dataclasses import dataclass
from typing import Annotated, List, ValueRange
from pydantic import validate_arguments
@validate_arguments
@dataclass
class WorldArea:
...
data: Annotated[List[float], ValueRange(1, 3)]
...
Run Code Online (Sandbox Code Playgroud)
这个想法是数据将是一个包含 1、2 或 3 个元素的列表,正如您所看到的,我正在使用 Annotated 和 ValueRange,但是当我执行时,我收到以下错误:
文件“a.py”,第 2 行,来自键入导入列表,ValueRange ImportError:无法从“打字”导入名称“注释”
文件“a.py”,第 2 行,来自键入导入列表,ValueRange ImportError:无法从“打字”导入名称“ValueRange”
以下 FastAPI 代码对我产生了意想不到的行为:
import uvicorn
from fastapi import FastAPI, Depends, Query
from typing import Optional
from pydantic.dataclasses import dataclass
app = FastAPI()
@dataclass
class Catz:
qqq: Optional[str] = Query(None, alias="q")
@app.get("/productz/")
def search_products(query: Catz = Depends(Catz) ):
products = [{"name": "Computer"}, {"name": "HDD"}]
if not query.qqq:
query.qqq = ""
return {"query": query, "results": [product for product in products if query.qqq in product["name"]]}
@dataclass
class Cats:
qqq: Optional[str] = Query(None )
@app.get("/products/")
def search_products(query: Cats = Depends(Cats) ):
products = [{"name": …Run Code Online (Sandbox Code Playgroud) 所以我有一个看起来像这样的请求
\n[\n {\n "Code": "EVR-T-0dsfdsdf532",\n "Agent": "pacman",\n "Kilometrage": "60000",\n "Operation": "Vidange",\n "Piece_Consomable": "filtre \xc3\xa0 air",\n "Quantit\xc3\xa9": 1,\n "UnitPrice": "200.00",\n "Montant": 200,\n "Mainoeuvre": 100\n },\n {\n "Code": "EVR-T-ddsdf53dfds2",\n "Agent": "pacman",\n "Kilometrage": "60000",\n "Operation": "Pneumatique",\n "Piece_Consomable": "(Autre) Uiop",\n "Quantit\xc3\xa9": 1,\n "UnitPrice": "200.00"\n }\n]\nRun Code Online (Sandbox Code Playgroud)\n我的代码看起来像这样
\n@app.post("/utilities/Entretien/submit", status_code=status.HTTP_200_OK)\nasync def create_item(item: Request, db: Session = Depends(get_db)):\n operations = await item.json()\n for i in operations:\n i : EntretienModel\n new_operation = TableEntretien(**i)\n db.add(new_operation)\n db.commit()\n db.refresh(new_operation)\n return {"ping": "pong"}\nRun Code Online (Sandbox Code Playgroud)\n我基本上是循环遍历数组,然后将每个对象插入数据库中,\n我正在寻找一种解决方案,可以使用如下所示的 pydantic 模型验证每个对象:
\nclass …Run Code Online (Sandbox Code Playgroud)