1. 程式人生 > >sqlalchemy limmit、offset及slice操作詳解

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,我們就可以使用offsetsession.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]
       結果:


      結論:我們可以使用切片操作來獲取想要的資料