sqlalchemy limmit、offset及slice操作详解

在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]
 
      结果:


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

猜你喜欢

转载自blog.csdn.net/aimill/article/details/80690722