如何在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
相关产品推荐
相关产品推荐

