В настоящее время я определяю ORM и DTO в своем приложении fastapi и использую для этой работы SQLAlchemy 2.0.
Многие источники, включая официальную документацию, указывают, что способ использования отображаемых типов с ORM заключается в использовании Mapped_columns, а затем указывают типы вместе с Mapped, как показано ниже:
class Base(MappedAsDataclass, DeclarativeBase):
pass
class Board(Base):
__tablename__ = "board"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
name: Mapped[str] = mapped_column(String)
Однако при этом pylance выделяет тип отображаемых столбцов как MappedColumn[Any] вместо подразумеваемых типов. Мои вопросы:
Почему это происходит? И это намеренное поведение? Насколько я понимаю, типы должны сопоставляться с типами mysql с типами Python, но здесь это не так.
Как работают значения по умолчанию для первичного ключа? В частности, для приведенного выше кода, когда я пытаюсь инициализировать экземпляр платы с помощью b = Board(name='test'), pylance показывает ошибку. Аргумент отсутствует для параметра "id". Это кажется странным, поскольку автоинкремент должен распознаваться как имеющий значение по умолчанию. Нужно ли явно добавлять параметр default= в определение ORM, чтобы избежать этой ошибки?
В настоящее время я определяю ORM и DTO в своем приложении fastapi и использую для этой работы SQLAlchemy 2.0. Многие источники, включая официальную документацию, указывают, что способ использования отображаемых типов с ORM заключается в использовании Mapped_columns, а затем указывают типы вместе с Mapped, как показано ниже: [code]class Base(MappedAsDataclass, DeclarativeBase): pass
class Board(Base): __tablename__ = "board" id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) name: Mapped[str] = mapped_column(String) [/code] Однако при этом pylance выделяет тип отображаемых столбцов как MappedColumn[Any] вместо подразумеваемых типов. Мои вопросы: [list] [*]Почему это происходит? И это намеренное поведение? Насколько я понимаю, типы должны сопоставляться с типами mysql с типами Python, но здесь это не так.
[*]Как работают значения по умолчанию для первичного ключа? В частности, для приведенного выше кода, когда я пытаюсь инициализировать экземпляр платы с помощью b = Board(name='test'), pylance показывает ошибку. Аргумент отсутствует для параметра "id". Это кажется странным, поскольку автоинкремент должен распознаваться как имеющий значение по умолчанию. Нужно ли явно добавлять параметр default= в определение ORM, чтобы избежать этой ошибки?