You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gino(SQLAlchemy衍生框架)中创建含DESC排序的索引?

如何在Gino/SQLAlchemy表定义中指定降序索引?

要创建你需要的dataset_id升序、created_at降序的复合索引,只需要在定义索引时用db.desc()包裹需要降序的列名即可——因为Gino是基于SQLAlchemy的,直接沿用SQLAlchemy的索引排序语法就行。

修改后的完整表定义代码如下:

from gino import Gino
db = Gino()
class DatasetUpdateModel(db.Model):
    __tablename__ = "dataset_updates"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    dataset_id = db.Column(db.Integer, nullable=False)
    created_at = db.Column(db.DateTime(timezone=True))
    __table_args__ = (
        db.Index(
            "dataset_updates_dataset_id_created_at_idx",
            "dataset_id",  # 默认升序,无需额外指定
            db.desc("created_at"),  # 明确指定该列按降序排序
        ),
    )

关键细节说明:

  • 对于默认升序的列(比如这里的dataset_id),直接写列名字符串就可以,SQLAlchemy默认会使用升序(ASC)规则。
  • 对于需要降序的列,必须用db.desc()(Gino的db对象已经封装了SQLAlchemy的desc方法)包裹列名,这样生成的SQL就会和你预期的CREATE INDEX ON dataset_updates(dataset_id, created_at DESC);完全一致。

如果后续在类外部引用索引,也可以改用列对象的写法db.desc(DatasetUpdateModel.created_at),不过在类内部定义时,用字符串写法会更简洁直接。

内容的提问来源于stack exchange,提问作者indigo153

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 19:32:36