是否可以继承Python类型注释?



我正在学习一个名为SQLModel的新工具,由Sebastian Ramirez (FastAPI的创建者)编写。

对于SQLModel中的基本CRUD操作,文档告诉您必须像这样设置一个模型实体:

from typing import Optional, List
from sqlmodel import Field, SQLModel, Relationship

class RoomBase(SQLModel):
name: str
is_ensuite: bool
current_occupants: Optional[List[str]]
house_id: Optional[int] = Field(default=None, foreign_key="house.id")
class Room(RoomBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
house: Optional["House"] = Relationship(back_populates="rooms")
class RoomCreate(RoomBase):
pass
class RoomRead(RoomBase):
id: int
class RoomUpdate(SQLModel):
name: Optional[str] = None
is_ensuite: Optional[bool] = None
current_occupants: Optional[List[str]] = None
house_id: Optional[int] = None

上面的例子将创建一个名为Room的模型,它是House的一部分。对于每一个新的模型类,这都必须重复,这意味着我可以忘记在同一个文件中放入多个模型。

一个小CRUD的大量代码,对吗?

因为我很可能在90%的时间里使用相同的CRUD设置(例如,我总是希望所有字段在更新时都是可编辑的,或者我总是只需要读取ID等),这让我想知道上述是否可以抽象,以便整个文件不必为每个单独的数据库实体重复。

在Python中是否有可能通过继承或其他方式传递字段和类型,这样我只需要编写一次上述代码的泛型版本,而不必为每个模型编写所有版本?

显示您正在使用fastapi。如果是这样,那么fastapi-crudrouter呢?它替我做了大部分的工作。而google fastapi-crudrouter链接时,我找到另一个项目FastAPIQuickCrud。只是略读,但似乎解决了同样的问题。