Skip to main content
 首页 » 编程设计

python之SQLALchemy 自定义整数排序顺序

2025年05月04日17birdshome

我有一个表,其中有一列整数代表该行的类型。这些整数的范围为 1 - 5。如何在 SQLAlchemy 中指定自定义排序顺序,例如,如果我希望按以下顺序排序行 [4, 2, 3, 5, 1]?

我知道 Enum数据类型,但映射到数据库后端中的 VARCHAR 并且更改架构不是一个选项。

请您参考如下方法:

我猜您一定已经有了一些表,其中包含一些关于类型 或行的信息。如果你不这样做,也许你应该有这样一个查找表。如果此顺序始终相同,我会在此表中添加一列以指示顺序,加入并使用它。

class TypeInfo(Base): 
    __tablename__ = 'typeinfo' 
    id = Column(Integer, primary_key=True) 
    sort_order = Column(Integer) 
 
# assiming the database contains values like: 
tis = [ TypeInfo(id=1, sort_order=50), 
        TypeInfo(id=2, sort_order=20), 
        TypeInfo(id=3, sort_order=30), 
        TypeInfo(id=4, sort_order=10), 
        TypeInfo(id=5, sort_order=40), 
        ] 
 
# your query might look like below: 
q = session.query(SomeTable) 
q = q.join(TypeInfo, SomeTable.type == TypeInfo.id).order_by(TypeInfo.sort_order) 

如果您无法更改数据库,或者顺序可能不同,您可以使用 case 解决此问题表达式,尽管它在大型数据集上的表现可能不是很快:

_whens = {4: 1, 2: 2, 3: 3, 5: 4, 1: 5} 
sort_order = case(value=SomeTable.type, whens=_whens) 
q = session.query(SomeTable) 
q = q.order_by(sort_order)