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

Sqlalchemy 2中limit()、offset()及slice()的合规替代语法咨询

SQLAlchemy 2.0 中 LIMIT/OFFSET 及 slice() 的替代写法

一、LIMIT/OFFSET 的合规新语法

在SQLAlchemy 2.0中,官方推荐使用顶级的select()构造器构建查询,替代表对象自带的select()方法。你原有的查询逻辑可以修改为以下符合2.0规范的写法,功能完全一致:

# 替换原查询定义行
query = select(numbers).offset(20).limit(10)

二、slice() 函数的替代语法

旧版slice(start, stop)用于截取start到stop区间的行,在2.0中可直接用offset() + limit()的组合实现等价效果:

  • slice(start, stop) 等价于 offset(start).limit(stop - start)

比如你要实现slice(20, 30)的效果,就对应offset(20).limit(10),和你当前的查询逻辑完全匹配。

修改后的完整代码

import sqlalchemy as db
from sqlalchemy import URL, insert, delete, select, update

url_object = URL.create(
    "postgresql",
    username="ken",
    password="",
    host="localhost",
    database="postgres",
)
engine = db.create_engine(url_object)

conn = engine.connect()
metadata = db.MetaData()
numbers = db.Table('numbers', metadata,
              db.Column('id', db.Integer(), primary_key=True),
              db.Column('number', db.Integer())
              )

metadata.create_all(engine) 
for i in range(100):
    statement = insert(numbers).values(number=(i+1) * 5)
    conn.execute(statement)
conn.commit()

# 使用2.0合规语法构建查询
query = select(numbers).offset(20).limit(10)
output = conn.execute(query)
print(output.fetchall())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:42:13