我试图对秘密字符串施加限制。例如,如果可以的话,我想要这样的东西:
from pydantic import constr, SecretStr
class SimpleModel(BaseModel):
password: (SecretStr, constr(min_length=8, max_length=32))
Run Code Online (Sandbox Code Playgroud)
如果可以做一些事情来实现这一点,我的下一个问题将是:我还可以添加一个需要非单词字符的约束吗?我可以自己进行正则表达式检查,但我正在尝试pydantic更全面地采用。
我目前正在使用Google Cloud Run部署 API,尽管一切正常,但我现在很难理解我收到的错误。
\n我使用FastAPI在 python3 上创建了 API ,位置模型基于Pydantic\'s BaseModel。
\n为了说明这一点,我定义了一条测试路线,如下所示:
\nclass Location(BaseModel):\n lat: float\n lng: float\n\n\n@router.get(\'/test_404\')\nasync def test_404(origin: Location = Body(...),\n destination: Location = Body(...)):\n print(origin)\n print(destination)\n return {\'res\': \'ok\'}\nRun Code Online (Sandbox Code Playgroud)\n该路由应在请求正文中采用两个参数:起点和目的地,并且只有当我在本地部署它时才会这样做。\n这:
\nurl_local = "http://0.0.0.0:8080/test_404"\ndata = {\n \'origin\': {\'lat\': 104, \'lng\': 342},\n \'destination\': {\'lat\': 104, \'lng\': 342}\n}\nresp = requests.get(url_local, json = data)\nprint(resp.text)\nRun Code Online (Sandbox Code Playgroud)\n输出:
\n\'{"res":"ok"}\'\nRun Code Online (Sandbox Code Playgroud)\n当我在 Cloud Run 上部署相同的服务时,就会出现问题。我的所有其他路线都工作正常,但以下是当我将上面的代码与容器 url 一起使用时得到的输出:
\n <!DOCTYPE html>\\n\n <html lang=en>\n <meta charset=utf-8>\n …Run Code Online (Sandbox Code Playgroud) python-3.x google-cloud-platform pydantic google-cloud-run fastapi
是否可以使用从 Pydantic.BaseModel 继承的模型类通过设置 orm_mode= true 来从 GUI 类获取数据,就像与数据库一起使用一样
from typing import List
from sqlalchemy import Column, Integer, String
from sqlalchemy.dialects.postgresql import ARRAY
from sqlalchemy.ext.declarative import declarative_base
from pydantic import BaseModel, constr
Base = declarative_base()
class CompanyOrm(Base):
__tablename__ = 'companies'
id = Column(Integer, primary_key=True, nullable=False)
public_key = Column(String(20), index=True, nullable=False, unique=True)
name = Column(String(63), unique=True)
domains = Column(ARRAY(String(255)))
class CompanyModel(BaseModel):
id: int
public_key: constr(max_length=20)
name: constr(max_length=63)
domains: List[constr(max_length=255)]
class Config:
orm_mode = True
Run Code Online (Sandbox Code Playgroud)
''''如果可以的话我该怎么做?
我想定义一个继承自 pydantic BaseModel 的基本模型,如下所示
class BaseDomain(BaseModel):
def __init__(self, **kwargs):
self.__exceptions = []
def add_error(self, exception: GeneralException):
self.__exceptions.append(exception)
Run Code Online (Sandbox Code Playgroud)
但是当我使用继承自 BaseDomain 的产品模型时出现此错误
ValueError: "Product" object has no field "_BaseDomain__exceptions"
Run Code Online (Sandbox Code Playgroud) 我想检查 JSON 字符串是否是有效的 Pydantic 架构。
from pydantic import BaseModel
class MySchema(BaseModel):
val: int
Run Code Online (Sandbox Code Playgroud)
我可以通过 try/ except 非常简单地做到这一点:
import json
valid = '{"val": 1}'
invalid = '{"val": "horse"}'
def check_valid(item):
try:
MySchema(**json.loads(item))
return True
except:
return False
print(check_valid(valid))
print(check_valid(invalid))
Run Code Online (Sandbox Code Playgroud)
输出:
True
False
Run Code Online (Sandbox Code Playgroud)
使用 try/ except 来获得真/假似乎是不好的做法。有没有更好的办法?
我有一个 Pydantic 模型如下
class Student(BaseModel):
name:str
age:int
Run Code Online (Sandbox Code Playgroud)
通过此设置,我希望获得如下 OpenAPI 架构:

那么,如何使用 Pydantic 模型来获取 FastAPI 中的 from 查询参数呢?
我的路线:
@router.get('/check/{value}', status_code=200)
def ranks_check(value: BasicInput = Depends()):
"""
Test endpoint
"""
return value
Run Code Online (Sandbox Code Playgroud)
我的型号:
class BasicInput:
"""
Get Confidence to score Input class
"""
value: int
@validator('value')
def check_if_value_in_range(cls, v):
if not 0 < v < 1000001:
raise ValueError('Value Exceeded Limit')
Run Code Online (Sandbox Code Playgroud)
我需要做什么:
我需要验证输入并在出现 ValueError 时引发 HTTP 400。
我知道我可以使用 Pydantic 的类型完成整数验证,并在路由函数本身中Field进行运行。check_if_value_in_range我正在寻找使用该模型的解决方案。
我正在使用FastAPI制作我的个人投资组合 API ,并决定尝试SQLModel。它感觉非常直观,到目前为止我很喜欢它,但我遇到了一个问题,我已经挣扎了好几天,试图了解如何解决它。
\n我有一个项目模型:
\nfrom datetime import datetime\nfrom typing import List, Optional, Set\nfrom sqlmodel import SQLModel, Field\n\n\nclass ProjectBase(SQLModel):\n name: Optional[str]\n summary: Optional[str]\n description: Optional[str]\n category: Set[str] = ()\n award: Optional[str] = None\n url: Optional[str] = None\n published: datetime = datetime.utcnow()\n image: str = "placeholderMainImage"\n images: List[str] = []\n learning: Optional[str]\n tech: Optional[str]\n tools: Optional[str]\n\n\n\nclass Project(ProjectBase, table=True):\n id: int = Field(default=None, primary_key=True)\n created_at: datetime = Field(default_factory=datetime.utcnow)\n updated_at: datetime = Field(default_factory=datetime.utcnow)\nRun Code Online (Sandbox Code Playgroud)\nFastAPI 工作正常,我检查了 localhost:8000/docs并正确进行了类型验证: …
我有来自外部系统的 json,其中包含“system-ip”、“domain-id”等字段。这些名称在Python中是不允许的,所以我想将它们更改为“system_ip”,“domain_id”等。我在stackoverflow上阅读了所有带有“pydantic”w关键字的内容,我尝试了pydantic文档中的示例,作为最后的手段,我生成了json来自我的 json 的架构,然后使用
datamodel-codegen --input device_schema.json --output model.py
我生成了模型。
生成的模型具有如下字段
system_ip: str = Field(..., alias='system-ip')
host_name: str = Field(..., alias='host-name')
device_type: str = Field(..., alias='device-type')
device_groups: List[str] = Field(..., alias='device-groups')
Run Code Online (Sandbox Code Playgroud)
但它仍然不起作用。当我做
with open("device.json") as file:
raw_device = json.load(file)
d = PydanticDevice(**raw_device)
Run Code Online (Sandbox Code Playgroud)
pydantic 仍然看到“旧”字段名称,而不是带注释的字段名称,并且我有错误
TypeError: __init__() got an unexpected keyword argument 'system-ip'
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
我正在使用 pydantic 制作一个模型,我想声明一个字段,每次创建对象时都会生成一个随机值(如 id)。我不想在初始化对象时必须传递该字段的值,这是我想要使用 python 类方法的快速示例:
from uuid import uuid4
class User:
def __init__(self, name, last_name, email):
self.name = name
self.last_name = last_name
self.email = email
self.id = uuid4()
Run Code Online (Sandbox Code Playgroud)
我尝试用 pydantic 做到这一点:
from pydantic import BaseModel, EmailStr
from uuid import UUID, uuid4
class User(BaseModel):
name: str
last_name: str
email: EmailStr
id: UUID = uuid4()
Run Code Online (Sandbox Code Playgroud)
但是,使用此模型创建的所有对象都具有相同的 uuid,所以我的问题是,当使用 pydantic 创建对象时如何生成唯一值(在本例中为 id 字段)。谢谢 !
pydantic ×10
python ×8
fastapi ×4
python-3.x ×3
json ×1
model ×1
sqlalchemy ×1
sqlmodel ×1
validation ×1