考虑从包派生的这个数据类pydantic
:
from typing import List
from pydantic import BaseModel
class Bucket(BaseModel):
setting: List[str]
fight_1: List[int]
cause_1: List[str]
Run Code Online (Sandbox Code Playgroud)
让my_bucket
成为 的一个实例Bucket
:
my_bucket = Bucket(setting=['some_value'], fight_1=[0], cause_1=['other_value'])
Run Code Online (Sandbox Code Playgroud)
基本上我希望能够做到
my_bucket['setting']
Run Code Online (Sandbox Code Playgroud)
然后返回['some_value']
,但我得到:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-18-cacbdc1698e9> in <module>
----> 1 my_bucket['setting']
TypeError: 'Bucket' object is not subscriptable
Run Code Online (Sandbox Code Playgroud) 在 pydantic 中,有一种更干净的方法可以从模型中排除多个字段,例如:
class User(UserBase):
class Config:
exclude = ['user_id', 'some_other_field']
Run Code Online (Sandbox Code Playgroud)
我知道以下有效。
class User(UserBase):
class Config:
fields = {'user_id': {'exclude':True},
'some_other_field': {'exclude':True}
}
Run Code Online (Sandbox Code Playgroud)
但我一直在寻找像 django Rest Framework 这样更干净的东西,你可以在其中指定排除或包含的列表。
我试图用定义的字段名称而不是别名返回我的模型。
class FooModel(BaseModel):
foo: str = Field(..., alias="bar")
@app.get("/") -> FooModel:
return FooModel(**{"bar": "baz"})
Run Code Online (Sandbox Code Playgroud)
{"bar": "baz"}
当我想要的时候就会得到回应{"foo": "baz"}
。我知道使用dict
模型的方法时这在某种程度上是可能的,但感觉不对并且会扰乱请求处理程序的输入。
@app.get("/") -> FooModel:
return FooModel(**{"bar": "baz"}).dict(by_alias=False)
Run Code Online (Sandbox Code Playgroud)
我觉得应该可以在配置类中设置它,但我找不到正确的选项。
我正在使用 Sagemaker 笔记本,在导入 vaex 时,出现以下错误。我使用的vaex版本是4.16.0
PydanticImportError:BaseSettings
已移至pydantic-settings
包中。有关更多详细信息,请参阅https://docs.pydantic.dev/2.0.2/migration/#basesettings-has-moved-to-pydantic-settings。
有关更多信息,请访问https://errors.pydantic.dev/2.0.2/u/import-error
有人知道如何解决这个问题吗?
我尝试在安装 vaex 时降级 pydantic 库,但这没有帮助。
我想在 google colab 中执行此代码,但出现以下错误:
from llama_index.prompts.prompts import SimpleInputPrompt
# Create a system prompt
system_prompt = """[INST] <>
more string here.<>
"""
query_wrapper_prompt = SimpleInputPrompt("{query_str} [/INST]")
Run Code Online (Sandbox Code Playgroud)
错误:
/usr/local/lib/python3.10/dist-packages/pydantic/_internal/_config.py:269: UserWarning: Valid config keys have changed in V2:
* 'allow_population_by_field_name' has been renamed to 'populate_by_name'
warnings.warn(message, UserWarning)
---------------------------------------------------------------------------
PydanticUserError Traceback (most recent call last)
<ipython-input-36-c45796b371fe> in <cell line: 3>()
1 # Import the prompt wrapper...
2 # but for llama index
----> 3 from llama_index.prompts.prompts import SimpleInputPrompt
4 # Create a system prompt …
Run Code Online (Sandbox Code Playgroud) 我有以下 Pydantic 模型:
class Report(BaseModel):
id: int
name: str
grade: float = None
proportion: float = None
@validator('*', pre=True)
def blank_strings(cls, v):
print(v)
if v == "":
return None
return v
Run Code Online (Sandbox Code Playgroud)
我的目标是能够将空字符串视为空值,但它似乎不起作用。
Report(id=5,name="Steve",grade=0.5)
创建一个实例,其中proportion=None
but...
Report(id=5,name="Steve",grade=0.5,proportion="")
抛出 error value is not a valid float (type=type_error.float)
。我怎样才能得到与第一种情况相同的结果?
我正在使用 pydantic 1.3 来验证我正在编写的 API 的模型。
在继承自 pydantic.BaseModel 的类中包含任意方法是否常见/好的做法?
我需要一些与对象关联的辅助方法,我正在尝试决定是否需要“处理程序”类。这些模型正在转换为 json 并发送到我也在编写的宁静服务。
我的模型看起来像这样:
class Foo(pydantic.BaseModel):
name: str
bar: int
baz: int
Run Code Online (Sandbox Code Playgroud)
做这样的事情是不是不好的做法:
class Foo(pydantic.BaseModel):
name: str
bar: int
baz: int
def add_one(self):
self.bar += 1
Run Code Online (Sandbox Code Playgroud)
这对我来说有些道理,但我找不到任何人这样做的例子。
先感谢您。
pydantic 很好地支持常规枚举,并且可以使用枚举实例和枚举值来初始化枚举类型字段:
from enum import Enum
from pydantic import BaseModel
class MyEnum(Enum):
FOO = 'foo'
BAR = 'bar'
class MyModel(BaseModel):
x: MyEnum
MyModel(x=MyEnum.BAR) # Enum instance, works
MyModel(x='foo') # Enum value, works
MyModel(x='?') # Fails, as expected
Run Code Online (Sandbox Code Playgroud)
pydantic 还支持typing.Literal
:
from typing import Literal
from pydantic import BaseModel
class MyModel(BaseModel):
x: Literal['foo']
MyModel(x='foo') # Works
MyModel(x='bar') # Fails, as expected
Run Code Online (Sandbox Code Playgroud)
现在我想将枚举和文字结合起来,即强制字段值等于一个特定的枚举实例。但是,我仍然希望能够传递正确的枚举值(即不仅仅是正确的枚举实例),但这似乎不起作用:
from enum import Enum
from typing import Literal
from pydantic import …
Run Code Online (Sandbox Code Playgroud) 是否可以在请求正文(或响应)的架构中指定列表的长度?支持使用查询函数验证 url 中传递的字符串的长度,但我没有看到任何列表。可能的用例是发送固定大小的浮点数列表以馈送到 ML 模型。
我可以找到一种方法,通过使用别名生成器将基于驼峰类型的请求正文转换为蛇形案例,但对于我的响应,我再次希望将蛇形案例类型转换为驼峰案例类型发布到模式验证。我有什么办法可以实现这个目标吗?
示例:我有一个 python 字典,如下所示,
{
"title_name": "search001",
"status_type": "New"
}
Run Code Online (Sandbox Code Playgroud)
并发布到 pydantic 模式验证我的字典应该将蛇大小写类型转换为驼峰大小写,如下所示,
{
"titleName": "search001",
"statusType": "New"
}
Run Code Online (Sandbox Code Playgroud)
如何定义 pydantic 模式来解决上述问题?
提前致谢。
pydantic ×10
python ×8
fastapi ×4
model ×2
backend ×1
llama-index ×1
prompt ×1
python-3.x ×1
vaex ×1
validation ×1