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)
这不是“解决方法”。这正是应该如何完成的(截至目前)。SQLModel背后的想法大概是提供一个用于构建来自 SQLAlchemy 的人们非常熟悉的表模型的工具包,同时还提供来自 Pydantic 模型的大部分好处。
\n在某些情况下,SQLModel 显然会以不同的方式做事,并且在某些方面它试图简化现有的接口。foreign_key
例如,在构造函数上提供参数Field
,这样您就不需要ForeignKey
从 SQLAlchemy 导入和实例化。
但在这种情况下,我真的看不出尝试改变现有工具的意义。__table_args__
SQLAlchemy 声明性 ORM 模型允许您通过类属性设置复合索引和其他表参数。SQLModel 的元类继承了这个功能。那么为什么要重新发明轮子呢?
除非您知道如何进一步简化它。在这种情况下,我确信 Sebasti\xc3\xa1n 会对问题跟踪器中的相应PR或建议感到非常高兴。
\n