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

