标签: pydantic

BigInteger 与 fastapi 和 sqlmodel

我将 FastAPI 与 SQLModel 结合使用,它基于 pydantic、SQLAlchemy 和类型提示。我正在尝试创建一个BitIntegerint64就足够了)专栏。我怎么做?

我的 sql 模型声明看起来像这样

class ItemBase(sqlmodel.SQLModel):
    name: str
    price: int  


class Item(ItemBase, table=True):
    id: int = sqlmodel.Field(default=None, primary_key=True)


class ItemCreate(ItemBase):
    pass
Run Code Online (Sandbox Code Playgroud)

提前致谢!

python sqlalchemy pydantic fastapi sqlmodel

3
推荐指数
1
解决办法
3182
查看次数

FastAPI 响应中的项目列表

在我的 Fast API 应用程序中,我有这个 pydantic 模型

class UserInArticleView(BaseModel):
    """What fields will be in nested sent_to_user list."""

    telegram_id: int

    class Config:
        """Enable ORM mode."""

        orm_mode = True

class ArticleBase(BaseModel):
    id: int
    text: str = Field(..., min_length=50, max_length=1024)
    image_url: HttpUrl = Field(..., title="Image URL")
    language_code: str = Field("ru", max_length=3, min_length=2)
    sent_to_user: List[UserInArticleView] = []

    class Config:
        orm_mode = True
Run Code Online (Sandbox Code Playgroud)

响应是

[
  {
    "id": 1,
    "text": "Some text",
    "image_url": "http://test.tt/",
    "language_code": "ru",
    "sent_to_user": [
      {
        "telegram_id": 444444444
      },
      {
        "telegram_id": 111111111
      }
    ] …
Run Code Online (Sandbox Code Playgroud)

python pydantic fastapi

3
推荐指数
1
解决办法
9366
查看次数

检查 pydantic 中的输入数据类型

有没有办法在 pydantic 中本地检查输入变量的数据类型,例如:

class ModelParameters(BaseModel):
    str_val: str
    int_val: int
    wrong_val: int


test = ModelParameters(**dict({
    "str_val":"test",
    "int_val":1,
    "wrong_val":1.2}))
Run Code Online (Sandbox Code Playgroud)

这应该会引发错误wrong_val

python validation pydantic

3
推荐指数
1
解决办法
3070
查看次数

如何在 pydantic 中验证带有空格的键

我有一个 json 键,其中有空格:

My_dict = {"my key": 1}
Run Code Online (Sandbox Code Playgroud)

我想创建一个Model来建模它:

from pydantic import BaseModel
class MyModel(BaseModel):
    mykey: int
    # my key isn't a legit variable name
    # my_key is, but like mykey - it doesn't catch the correct key from the json

MyModel(**my_dict)
Run Code Online (Sandbox Code Playgroud)

这是行不通的。

我尝试玩BaseModel.Config,但没有取得任何进展。也没有在文档中看到任何内容。

这可能吗?

我可以使用解决方法:遍历json,将所有键的空格替换为下划线,然后使用,pydantic但我不想使用这个...

python json pydantic

3
推荐指数
1
解决办法
1846
查看次数

Pydantic 合并两个成员(字段)

我有一个例子,我有一个 .env 文件,其中包含两个变量:

PROJECT_NAME="dummy"
DB_URL=postgresql+psycopg2://postgres:postgres@postgres:5432/
Run Code Online (Sandbox Code Playgroud)

在我的 config.py 中

class DummyConfig(BaseSettings):

    PROJECT: str = Field(...)

    DB_URL: str = Field(...)
Run Code Online (Sandbox Code Playgroud)

现在,根据我将运行的项目,PROJECT 变量将发生变化。我想通过连接 PROJECT + DB_URL 创建完整的数据库 url,并且这需要是配置类中的新变量(或在 DB_URL 中)。所以在这个例子中结果将是:

postgresql+psycopg2://postgres:postgres@postgres:5432/dummy
Run Code Online (Sandbox Code Playgroud)

在 Config 类中我想要这样的东西:

class DummyConfig(BaseSettings):

    PROJECT: str = Field(...)

    DB_URL: str = Field(...) + PROJECT #this is for illustration purpose, I know it does not work

Run Code Online (Sandbox Code Playgroud)

我研究了这篇文章:Pydantic:如何使用一个字段的值来设置其他字段的值?

但我不明白(因为分数低我也不能提问)如何做到这一点。OP正在使用user_dict,我认为它是在代码中的某个地方实例化的。我没有任何字典,我专门通过 .env 文件加载变量。

python environment-variables pydantic

3
推荐指数
1
解决办法
1875
查看次数

pydantic 模型验证器内字段分配的验证

我已经定义了以下 pydantic 模型。当我运行时p = IntOrStr(value=True),我预计会失败,因为它是布尔值,并且True它应该使分配失败__int__str

class IntOrStr(BaseModel):
    __int: Optional[conint(strict=True, le=100, ge=10)] = None
    __str: Optional[constr(strict=True, max_length=64, min_length=10)] = None
    value: Any

    @validator("value")
    def value_must_be_int_or_str(cls, v):
        try:
            __int = v # no validation. not sure why?
            return v
        except ValidationError as e:
            print(str(e))

        try:
            __str = v # no validation. not sure why?
            return v
        except ValidationError as e:
            print(str(e))

        raise ValueError("error. value must be int or str")

    class Config:
        validate_assignment = True
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么__int …

python pydantic

3
推荐指数
1
解决办法
2284
查看次数

Pydantic 的基本模型中不需要

我尝试从 API 接受数据,然后使用 Pydantic 基础模型验证响应结构。但是,我遇到的情况是,有时某些字段不会包含在响应中,而有时会包含在响应中。问题是,当我尝试验证结构时,Pydantic 开始抱怨这些字段“丢失”,尽管它们有时可能会丢失。我真的不明白如何将一个字段定义为“missible”。文档提到仅定义为名称和类型的字段被认为是这种方式,但我没有任何运气

这是我想要实现的目标的一个简单示例

# Response: {a: 1, b: "abc", c: ["a", "b", "c"]}
response: dict = json.loads(request_response)

# Pydantic Base Model
from pydantic import BaseModel
class Model(BaseModel):
   a: int
   b: str
   c: List[str]
   d: float

# Validating 
Model(**response)

# Return: ValidationError - Missing "d" field

Run Code Online (Sandbox Code Playgroud)

如何使“d”不会导致验证抛出错误?我尝试将“d”切换为d: Optional[float]d: Optional[float] = 0.0,但没有任何作用。

谢谢!

python typing python-typing pydantic

3
推荐指数
1
解决办法
5008
查看次数

Pydantic 模型中如何管理带有下划线的属性名称?

谁能解释一下 Pydantic 如何管理带下划线的属性名称?

在 Pydantic 模型中,使用下划线时会出现与属性命名相关的奇怪行为。这种行为不会发生在 python 类中。测试结果显示出一些据称“意外”的错误。

以下代码捕获简单类和实例操作的一些错误:

class PydanticClass(BaseModel):
    a: int = "AAA"
    _z: int = "_Z_Z_Z"

    @classmethod
    def get_a(cls):
        return cls.a

    @classmethod
    def get_z(cls):
        return cls._z

class NonPydanticClass:
    a: int = "AAA"
    _z: int = "_Z_Z_Z"

    @classmethod
    def get_a(cls):
        return cls.a

    @classmethod
    def get_z(cls):
        return cls._z

print ("PYDANTIC MODEL CLASS TEST:")
pydantic_instance = PydanticClass()

try:    msg1, msg2 = "SUCCESS", f"{pydantic_instance.get_a()}"
except Exception as e: msg1, msg2 = "ERROR", f"{e}"
print('{0:<7} :: {1:<27} :: {2:<65} :: {3}'.format(msg1, "1 …
Run Code Online (Sandbox Code Playgroud)

python pydantic

3
推荐指数
1
解决办法
6182
查看次数

如何使用 FastAPI 在查询参数名称中允许使用连字符 (-)?

我有一个简单的应用程序如下:

from typing import Annotated

import uvicorn
from fastapi import FastAPI, Query, Depends
from pydantic import BaseModel

app = FastAPI()


class Input(BaseModel):
    a: Annotated[str, Query(..., alias="your_name")]


@app.get("/")
def test(inp: Annotated[Input, Depends()]):
    return f"Hello {inp.a}"


def main():
    uvicorn.run("run:app", host="0.0.0.0", reload=True, port=8001)


if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

curl "http://127.0.0.1:8001/?your_name=amin"返回“你好阿明”


我现在将别名从 更改your_nameyour-name

from typing import Annotated

import uvicorn
from fastapi import FastAPI, Query, Depends
from pydantic import BaseModel

app = FastAPI()


class Input(BaseModel):
    a: Annotated[str, Query(..., alias="your-name")] …
Run Code Online (Sandbox Code Playgroud)

python query-string pydantic fastapi

3
推荐指数
1
解决办法
551
查看次数

将 sqlalchemy 响应转换为 pydantic 对象

如何在FastAPI中将字符串转换为模型类型?如果我有学生模型并且想要将字符串学生转换为类型模型。如何转换呢?

engine = create_engine(SQLALCHAMY_DATABASE_URL,pool_pre_ping=True,pool_recycle=3600)
meta = MetaData()
con = engine.connect()
SessionLocal = sessionmaker(bind=engine, autocommit=False, autoflush=False)
Base = declarative_base()

def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()


def convert_model(student,db:Session = Depends(database.get_db)):
   Q=student.all()



convert_model(student,db)
Run Code Online (Sandbox Code Playgroud)

它给出了错误str object has no attribute all()

python sqlalchemy pydantic fastapi

3
推荐指数
1
解决办法
5618
查看次数