复合索引 SQLModel

Adr*_*cía 9 python database indexing model sqlmodel

我正在尝试 SQLModel ( https://sqlmodel.tiangolo.com/ ),我发现我必须在多个字段之间创建复合索引,但我不知道如何使用 SQLModel 库来做到这一点。

数据库模型

我发现的唯一解决方法是直接使用 sqlalchemy Index,而不是 index=true (来自为唯一字段创建索引时的 SQLModel 文档 - )

class Jump(SQLModel, table=True):
    """
    SQL Table abstraction: Jump
    Contains data belonging to a connection between a questionnaire-version
    and another questionnaire-version
    """

    origin_name: str = Field(primary_key=True)
    origin_version: int = Field()
    destination_name: str = Field()

    __table_args__ = (
        Index(
            "compound_index_origin_name_version_destination_name",
            "origin_name",
            "origin_version",
            "destination_name",
        ),
    )
Run Code Online (Sandbox Code Playgroud)

Dan*_*erg 6

这不是“解决方法”。这正是应该如何完成的(截至目前)。SQLModel背后的想法大概是提供一个用于构建来自 SQLAlchemy 的人们非常熟悉的表模型的工具包,同时还提供来自 Pydantic 模型的大部分好处。

\n

在某些情况下,SQLModel 显然会以不同的方式做事,并且在某些方面它试图简化现有的接口。foreign_key例如,在构造函数上提供参数Field,这样您就不需要ForeignKey从 SQLAlchemy 导入和实例化。

\n

但在这种情况下,我真的看不出尝试改变现有工具的意义。__table_args__SQLAlchemy 声明性 ORM 模型允许您通过类属性设置复合索引和其他表参数。SQLModel 的元类继承了这个功能。那么为什么要重新发明轮子呢?

\n

除非您知道如何进一步简化它。在这种情况下,我确信 Sebasti\xc3\xa1n 会对问题跟踪器中的相应PR或建议感到非常高兴。

\n