在sqlalchemy中,如何使用limit 、offset 、slice(切片)呢?下面我就举例来讲讲这三种操作的用法。
老规矩,我们先创建一个模型(相信大家写这代码写的滚瓜烂熟了!)
class Arctire(Base):
__tablename__ = "arctire"
id = Column(Integer , primary_key=True , autoincrement=True)
title = Column(String(50) , nullable=False)
def__repr__(self):
return "title:%s"%self.title
Base.matadata.drop_all()
Base.metadata.create_all()
创建好模型后,我们向表中插入数据,由于我们要做切片操作,所以我们向表中多插入些数据(方便切片操作)。
我们循环插入一百条数据,代码如下:
for i in range(100):
title = Arctire(title="title %s"%i)
session.add(title)
session.commit()
打开mysql命令行工具,输入 select count(id) from arctire; 结果如下所示,说明我们成功插入了100条数据

成功插入数据后,接下来是我们表演真正的技术来(坏笑.gif)
我们先查询出所有的数据,代码如下。(为了方便查看效果,我已在模型中定义了__repr__ 方法)
results = session.query(Arctire).all()
print(results)
运行上述代码,不出意外的话,我们就能够得到如下结果。

接下来,我们就分别试试 limit、offset、slice操作
一、limit
我们知道 session.query(Arctire).all() 可以查询表中所有数据。如果想要查询表中前十条数据,怎么办呢?这时候,我们就可以使用limit了,当然你也可以其它方法。
语法:
results = session.query(Arctire).limit(10).all()
print(results)
结果:

结论:
limit可以限制表查询数据的数量
二、offset
我们先不去看offset有什么作用?我这人喜欢通过举例来证明结果(哼哼。。。有点吹牛哈!!!)
如果我们想要得到88(嗯,这个数字吉利)到95,我们就可以使用offset
session.query(Arctire).limit(8).offset(88).all()
结果:

结论:
offset可以设置查询偏移起始值
三、slice
slice也就是我们所说的切片操作(只对list有效),相信学过廖大python课程的都知道切片基本操作,在这里,我就不多做介绍。
语法:
slice(起始值,结束值)
如果我们想要得到最后十条数据,我们就可以使用slice来操作
results = session.query(Arctire).slice(90,100).all()
print(results)
当然,我们也可以使用如下方法,获得同样的结果。
results = session.query(Arctire)[90:100]
结果:
当然,我们也可以使用如下方法,获得同样的结果。
results = session.query(Arctire)[90:100]

结论:我们可以使用切片操作来获取想要的数据