Перейти к содержанию

Переход на pydantic 2.XX на 0.20.0

Версия 0.20.0 предоставляет поддержку pydantic v2.XX, предоставляя разработчикам значительное ускорение (аутентификация и сериализация написаны на Rust) и более чистое API, в то же время отказываясь от поддержки pydantic v.1.XX в ormar, который соответствует изменениям, сделанным в pydantic.

Значительные изменения

Переход на версию>= 0.20.0 требует внесения нескольких изменений для правильной работы.

Модель Oma

Теперь для каждой модели ormar требуется параметр ormar_config, который является экземпляром класса OrmarConfig, а не определяет класс Meta. Обратите внимание, что атрибут должен иметь имя ormar_config и быть экземпляром класса config.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Import Data abases
import ormar
Sqimport alchemy

databases.Database("sqlite:///db.sqlite")
Metadata = sqalchemy.MetaData

# ormar < 0.20
Class Album(Ormar):
    Класс Meta:
        database = база данных
        metadata = metadata
        tablename = "albums"


    id: int = ormar.Integer(primary_key =True)
    name: str = ormar.String(max_length =100)
    bool = ormar.Boolean(default=False)

# ormar >= 0,20
Class AlbumV20(Ormar.Model):
    Органом-де-Органом-Органом-де-Органом-Органом (
        database= база данных,
        Метаданные = метаданные,
        tablename="albums_v20"
    )

    id: int = ormar.Integer(primary_key =True)
    name: str = ormar.String(max_length =100)
    bool = ormar.Boolean(default=False)

OrmarConfig api/Параметры

ormar_config предоставляет тот же набор настроек, что и класс Meta. Это означает, что вы можете инициализировать конфигурацию с помощью любого из следующих параметров:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Metadata: Optional (sqlchemy.MetaData)
Database: Optional[databases.Database]
Engine: Optional (sqlalchemy.engine.Engine)
tablename: Optional[str]
Order_by: Optional[List[str]]
Abstract: Bool
exclude_parent_fields: Optional[List[str]]
queryset_class: Тип (QuerySet)
Extra: Extra
constraints: Optional[List[ColumnCollectionConstraint]]

Эквиваленты BaseMeta-Лучшие Лрактики

Обратите внимание, что для уменьшения дублирования кода и упрощения разработки по-прежнему рекомендуется создать базовую конфигурацию и предоставить копию каждой модели. OrmarConfig предлагает удобный способ копирования для этого.

Метод copy принимает те же параметры, что и init OrmarConfig, поэтому вы можете переопределить их по мере необходимости, но по умолчанию возвращает существующие атрибуты, за исключением tablename, order_by и зависимостей, которые по умолчанию удаляются.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Import Data abases
Import ormar
Sqimport alchemy

«Органа»((
    Database=databases.Database("sqlite:///db.sqlite")
    Metadata= sqalchemy.MetaData
)

Class AlbumV20(Ormar.Model):
    10.00.201.201.201.2011
        tablename="albums_v20"
    )

    id: int = ormar.Integer(primary_key =True)
    name: str = ormar.String(max_length =100)


Class TrackV20(Ormar):
    10.00.201.201.201.2011
        tablename="tracks_v20"
    )

    id: int = ormar.Integer(primary_key =True)
    name: str = ormar.String(max_length =100)

Параметры поля options больше не поддерживаются.

До версии 0.20 вы могли ограничить допустимые значения, предоставив параметры параметров для любого существующего поля ormar. Эта функция была удалена, и вы должны использовать поле ormar.Enum, разработанное для этой цели. Если вы хотите сохранить тип поля базы данных (т. е. целое поле), вы можете написать пользовательский валификатор в любое время.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Import Data abases
import ormar
sqimport alchemy

databases.Database("sqlite:///db.sqlite")
Metadata = sqalchemy.MetaData

# ormar < 0.20
Класс Artist(Ormar.Model)
    Класс Meta:
        database = база данных
        metadata = metadata


    id: int = ormar.Integer(primary_key =True)
    name: str = ormar.String(max_length =100)
    Country: str = ormar.String(default=False, max_length =50, choices=["UK", "US", "Vietnam", "Colombia"])

# ormar >= 0.20
Из импорта Enum Импорт Enum

class Country(str, Enum):
    Великобритания = "UK"
    US =«US »
    VIETNAM = "Vietnam"
    Colombia =«Colombia»

Class ArtistV20(Ormar):
    Органом-де-Органом-Органом-де-Органом-Органом (
        database= база данных,
        Метаданные = метаданные,
        tablename="artists_v20"
    )

    id: int = ormar.Integer(primary_key =True)
    name: str = ormar.String(max_length =100)
    Country: Country = ormar.Enum(enum_class =Country)

pydantic_only больше не поддерживает параметры поля

Поле pydantic_only было заброшено и удалено в v 0.20. Ormar позволяет определять поля pydantic как обычные pydantic модели.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Import Data abases
import ormar
Sqimport alchemy

databases.Database("sqlite:///db.sqlite")
Metadata = sqalchemy.MetaData

# ormar < 0.20
Class Dish(Ormar.Model):
    Класс Meta:
        database = база данных
        metadata = metadata
        tablename = dishes


    id: int = ormar.Integer(primary_key =True)
    name: str = ormar.String(max_length =100)
    cook: str = ormar.String(max_length =40, pydantic_only =True, default="sam")

# ormar >= 0,20
Class DishV20(Ormar.Model):
    Органом-де-Органом-Органом-де-Органом-Органом (
        database= база данных,
        Метаданные = метаданные,
        tablename='dishes_v20''
    )

    id: int = ormar.Integer(primary_key =True)
    name: str = ormar.String(max_length =100)
    cook: str = "sam" # this is Normal pydantic field

Больше не поддерживается отделка property_field

Property_field Уделка используется для передачи словаря/сериализации метода расчета полей, содержащихся в представлении модели. Версия pydantic 2. X представляет эту возможность, поэтому теперь вы должны перейти на собственную версию pydantic.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Import Data abases
Import ormar
Sqimport alchemy
Import pydantic

databases.Database("sqlite:///db.sqlite")
Metadata = sqalchemy.MetaData

# ormar < 0.20
Класс Employee(ormar.Model):
    Класс Meta:
        database = база данных
        metadata = metadata


    id: int = ormar.Integer(primary_key =True)
    first_name: str = ormar.String(max_length =100)
    last_name: str = ormar.String(max_length =100)

    ormar.property ().
    defull name(self) -> str.
        Return f '{self.first_name} {self.last_name}"

# ormar >= 0.20
class EmployeV20 (Ormar.Model):
    Органом-де-Органом-Органом-де-Органом-Органом (
        database= база данных,
        Метаданные = метаданные,
    )

    id: int = ormar.Integer(primary_key =True)
    first_name: str = ormar.String(max_length =100)
    last_name: str = ormar.String(max_length =100)

    pydantic.computed_field ()
    defull name(self) -> str.
        Return f '{self.first_name} {self.last_name}"

Отброшенные методы

Все перечисленные ниже методы устарели и будут удалены в версии 0.30.

Dict() становится моделью_dump ()

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Import Data abases
import ormar
sqimport alchemy

databases.Database("sqlite:///db.sqlite")
Metadata = sqalchemy.MetaData

Class Album(Ormar):
    Органом-де-Органом-Органом-де-Органом-Органом (
        database= база данных,
        Метаданные = метаданные,
        tablename="albums"
    )

    id: int = ormar.Integer(primary_key =True)
    name: str = ormar.String(max_length =100)
    bool = ormar.Boolean(default=False)

Альбом (name=«Dark Side of the Moon»)

# ormar < 0.20
album.dict = album.dict ()

# ormar >= 0,20
new_album_dict = album. model_dump ()

Обратите внимание на то, что параметры остаются неизменными, т. е. включают, исключают и т. д.

json() становится моделью_dump_json ()

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Import Data abases
Import ormar
sqimport alchemy

databases.Database("sqlite:///db.sqlite")
Metadata = sqalchemy.MetaData

Class Album(Ormar):
    Органом-де-Органом-Органом-де-Органом-Органом (
        database= база данных,
        Метаданные = метаданные,
        tablename="albums"
    )

    id: int = ormar.Integer(primary_key =True)
    name: str = ormar.String(max_length =100)
    bool = ormar.Boolean(default=False)

Альбом (name=«Dark Side of the Moon»)

# ormar < 0.20
Альбомы = album.json (

# ormar >= 0.20
new_album_dict = album. model_dump_json

Обратите внимание на то, что параметры остаются неизменными, т. е. включают, исключают и т. д.

construct() становится моделью_construct ()

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Import Data abases
Import ormar
Sqimport alchemy

databases.Database("sqlite:///db.sqlite")
Metadata = sqalchemy.MetaData

Class Album(Ormar):
    Органом-де-Органом-Органом-де-Органом-Органом (
        database= база данных,
        Метаданные = метаданные,
        tablename="albums"
    )

    id: int = ormar.Integer(primary_key =True)
    name: str = ormar.String(max_length =100)
    bool = ormar.Boolean(default=False)

Params = {
    Название: Dark Side of the Moon.
    «favorite»: Истинно,
}
# ormar < 0.20
Album = альбом.construct(**params)

# ormar >= 0.20
Альбом: model_construct (**params)

Для получения дополнительной информации о конструкции см. документацию по pydantic.