Python SQLAlchemy:我怎样才能永久地按列排序一个表?

Python SQLAlchemy:我怎样才能永久地按列排序一个表?,python,sqlalchemy,Python,Sqlalchemy,我不确定以前是否有人回答过这个问题,我没有快速搜索到任何东西 我的表是按随机顺序构建的,但此后很少修改。我经常从表中进行选择,每次选择时,我都需要按同一列对查询进行排序。现在有没有一种方法可以永久性地按列对表进行排序,这样就不需要为每次选择再次排序了?您只能在一个地方定义它,并将其重新用于 每个查询: def base_query(session, what_for): return session.query(what_for).order_by(what_for.rank_or_wh

我不确定以前是否有人回答过这个问题,我没有快速搜索到任何东西


我的表是按随机顺序构建的,但此后很少修改。我经常从表中进行选择,每次选择时,我都需要按同一列对查询进行排序。现在有没有一种方法可以永久性地按列对表进行排序,这样就不需要为每次选择再次排序了?

您只能在一个地方定义它,并将其重新用于 每个查询:

def base_query(session, what_for):
    return session.query(what_for).order_by(what_for.rank_or_whatever)
根据需要展开,然后对于除非常复杂的查询以外的所有查询,您可以这样使用:

some_query = base_query(session(), Employee).filter(Employee.feet > 3)
结果查询将按
Employee.rank\u或\u which
排序。当然,如果您总是查询同一个参数,您就不必将其用作参数


编辑:如果你可以在你的表上定义一个“永久性”的订单,引擎可以观察到这个订单,而不需要发布一个
订单,我认为这是一个特定于你使用的RDBMS的实现特性,只是方便而已。在内部,强制DBMS如何存储数据是没有意义的,因为使用
索引可以轻松高效地按特定顺序检索此数据,强制执行特定顺序可能会降低总体性能。

您可以添加按所需列排序的索引。数据将根据该索引进行预排序。

我更关心的是每次都需要重新排序所浪费的时间,而不是重新编写索引表的顺序。我不知道SQLAlchemy会这样做。我正在使用SQLite,根据knitti的回答,这会影响它吗?这不是sqlalchemy特性,而是RDBMS的特性。您可以使用索引指定表的隐式排序。有关查询计划器如何进行排序,请选中此项(转到排序部分)。