sqlalchemy mssql requires an order_by when using an offset or a non-simple limit clause

在使用 SQLAlchemy 连接 Microsoft SQL Server 数据库时,如果要使用 offset 或者非简单的 limit 子句,就必须使用 order_by 子句。

这是因为,在 Microsoft SQL Server 中, offset fetch 关键字只能与 order by 一起使用。如果您要使用这些关键字,就必须使用 order by 子句来指定结果集的排序方式。

例如,下面的查询将返回结果集中的第二条记录到第四条记录(即偏移量为 1,限制为 3):

SELECT * FROM mytable ORDER BY id OFFSET 1 ROWS FETCH NEXT 3 ROWS ONLY;

使用 SQLAlchemy,您可以使用 .offset().limit() 方法来生成这种查询:

query = (
    session.query(MyTable)
    .order_by(MyTable.id)
    .offset(1)
    .limit(3)

这将生成如下的 SQL 查询:

SELECT * FROM mytable ORDER BY id OFFSET 1 ROWS FETCH NEXT 3 ROWS ONLY;

希望这能帮到您。

  •