问题标签 [pydantic]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python/Pydantic - 使用带有 json 对象的列表
我有一个工作模型来接收json
使用pydantic
. 模型数据集如下所示:
我想做的是将json
文件列表作为数据集并能够验证它们。最终,列表将被转换为记录以pandas
供进一步处理。我的目标是验证一个任意长的json
条目列表,看起来像这样:
我现在的基本设置如下。请注意,添加class ItemList
是尝试使任意长度起作用的一部分。
然后,基本代码将产生我认为我在一个将获取Item
对象的数组对象中寻找的内容。
该设置适用于正在传递的单个 json 项目:
但是当我尝试将单个项目传递给ItemList
模型时,它会返回一个错误:
我也尝试过bigger_data
传入数组,认为它需要以列表的形式开始。这也会返回一个错误 - - 虽然,我至少对字典错误有了更好的理解,但我不知道如何解决。
谢谢。
我尝试过的其他事情
我已经尝试将数据传递到特定的键中,运气好一点(也许?)。
python - 在适用于字符串集的 pydantic 模型中使用正则表达式
我正在使用 pydantic 模型来表示fastapi
.
这会将请求正文限制为定义为的 url 集str
。
我想知道是否有一种方法可以通过使用例如正则表达式来进一步限制正文中发送的 url 的“类型”。我知道Schema
有一个regex
标志,但我认为这只适用于单个输入(或者至少它不适用于我的列表)。
python - pydantic 和抽象类的子类
我正在尝试将 pydantic 与如下所示的模式一起使用:
它只占用了 Base 类的字段,而忽略了其余部分。如何使用 pydantic 进行这种继承?我希望事件是子类的实例列表Base
python - Python 从不同版本导入不同的库
我正在尝试开发一个 Python 脚本,但我似乎遇到了我想要包含的两个库之间的冲突。
我拥有的第一个依赖项是 pymoos ( https://github.com/msis/python-moos ),它是连接到我的通信架构所必需的。我已经构建了代码并在以下位置手动安装了生成的 pymoos.so:
- /usr/lib/python3.6/site-packages/pymoos.so
- /usr/lib64/python2.7/lib-dynload/pymoos.so
- /usr/lib64/python3.6/lib-dynload/pymoos.so
- /usr/local/lib/python3.7/lib-dynload/pymoos.so
但是,只有 python2.7 允许我从解释器中“导入 pymoos”。尝试从任何一个 Python3 版本都会产生以下结果:
第二个依赖项是 pydantic,我只设法使用 pip3 安装它,显然这意味着它只能从我安装的任何一个 Python3 版本中获得。尝试从 Python2 导入会得到以下结果:
因为我知道 pymoos.so 库在哪里,我认为我最简单的方法是将它放在正确的位置以便它与 python3 一起使用,但我似乎找不到正确的位置!
python - pydantic 与 mypy 的使用
我正在尝试使用密集使用 pydantic 的 FastAPI 编写应用程序。我还想使用mypy
. 如何在不冲突的情况下对 pydantic 和 mypy 使用类型注释?
我知道type: ignore
评论,但在我看来这是某种作弊:)
例子:
此代码工作正常,但类型检查失败。
我的输出:
python - Cerberus 验证速度很慢,我做错了什么?
(免责声明:我读过的关于stackoverflow的每一次性能比较都因为不全面/正确/写得好/相关等而受到抨击。等等-我不是假装这是一个真正的比较或完美的设置,我只是想知道我是否可以使 cerberus 更快地验证数据。)
我有cerberus的以下模型设置:
这用于验证数据,大约 50% 的数据通过do_validation
。
问题是 cerberus在执行此验证时非常慢,每次验证平均花费超过一毫秒。相比之下,这比其他库慢 10 倍以上,比pydantic
我对其进行基准测试时慢 26 倍。
如果 cerberus 稍微慢一点,我不会感到惊讶,但这种差异似乎太极端了,无法理解。
我做错了什么会严重损害性能吗?
上面的代码是为pydantic 文档的基准测试部分编写的。
添加 cerberus 的 PR(当前)在此处打开,其中包含完整的代码和结果。
python - Dataclasses: Require at least one value to be set in grouping of model fields
How can one require at least one field in a group of fields on a dataclass to be set to a truthy value? Does this require a custom root validator method as it requires looking at many fields at once? For example, consider the following dataclass:
How could one require at least one of these three fields (field1
, field2
, or field3
) to be set to a non-empty string? Is there some built-in way to specify at least one field must be non-nil/empty (besides a custom root validator)?
python - 哪种类型提示表示属性不能为 None?
在下面的代码中,我需要声明my_attr
为除 None
.
我应该换Any
什么?
python - 解包类定义以在对象之间共享变量名
虽然可能有更好的方式来表达这个问题,但这个想法非常简单。
我有两节课。包裹和包裹请求。ParcelRequest 在 API 中用于请求具有给定参数的 Parcel 的信息,并且
实际上,ParcelRequest 需要与 Parcel 相同的所有参数,但需要一个quantity
附加值。
每当 Parcel 被修改时,有没有办法让 Parcel 和 ParcelRequest “同步”?
注意:在此特定示例中,我们无法更改传入请求的结构。这意味着,我们不能简单地在 ParcelRequest 中包含一个引用 Parcel 对象的“parcel”属性,因为它会改变请求的结构。
问题是这是否可以做到。但作为奖励,应该这样做吗?我的信念是,虽然 API 会随着 Parcel 的发展而与它保持同步,但开发人员可能会通过更新 Parcel 无意中破坏 API,除非经过仔细处理并且没有进行适当的测试。
python - Pydantic 同名模型列表
假设我想要一个 User 模型,其中还包含“friends”字段,该字段必须是用户列表:
但这是不可能的。有没有办法实现这种行为?