Переход на 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. Это означает, что вы можете инициализировать конфигурацию с помощью любого из следующих параметров:
| 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]]
|
Обратите внимание, что для уменьшения дублирования кода и упрощения разработки по-прежнему рекомендуется создать базовую конфигурацию и предоставить копию каждой модели. 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.