sqlalchemy limmit、offset及slice操作詳解
阿新 • • 發佈:2019-01-30
在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可以限制表查詢資料的數量
結論:offset可以設定查詢偏移起始值
slice也就是我們所說的切片操作(只對list有效),相信學過廖大python課程的都知道切片基本操作,在這裡,我就不多做介紹。語法:slice(起始值,結束值)如果我們想要得到最後十條資料,我們就可以使用slice來操作results = session.query(Arctire).slice(90,100).all()print(results)
當然,我們也可以使用如下方法,獲得同樣的結果。
results = session.query(Arctire)[90:100]
結果:
結論:我們可以使用切片操作來獲取想要的資料
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]
結果:
結論:我們可以使用切片操作來獲取想要的資料