1. 程式人生 > >sqlalchemy和flask-sqlalchemy的幾種分頁方法

sqlalchemy和flask-sqlalchemy的幾種分頁方法

elf offset 分頁查詢 order == ems div statement ron

sqlalchemy中使用query查詢,而flask-sqlalchemy中使用basequery查詢,他們是子類與父類的關系

假設 page_index=1,page_size=10;所有分頁查詢不可以再跟first(),all()等

1.用offset()設置索引偏移量,limit()限制取出量

db.session.query(User.name).filter(User.email.like(%+email+%)).limit(page_size).offset((page_index-1)*page_size)
#filter語句後面可以跟order_by語句

2.用slice(偏移量,取出量
)函數

db.session.query(User.name).filter(User.email.like(%+email+%)).slice((page_index - 1) * page_size, page_index * page_size)
#filter語句後面可以跟order_by語句

註釋:此方法和第一種相同的效果。

因為:由一下內部方法可知,slice()函數第一個屬性就是offset()函數值,第二個屬性就是limit()函數值

@_generative(_no_statement_condition)
    def slice(self, start, stop):
        
"""apply LIMIT/OFFSET to the ``Query`` based on a " "range and return the newly resulting ``Query``.""" if start is not None and stop is not None: self._offset = (self._offset or 0) + start self._limit = stop - start elif start is None and stop is
not None: self._limit = stop elif start is not None and stop is None: self._offset = (self._offset or 0) + start if self._offset == 0: self._offset = None @_generative(_no_statement_condition) def limit(self, limit): """Apply a ``LIMIT`` to the query and return the newly resulting ``Query``. """ self._limit = limit @_generative(_no_statement_condition) def offset(self, offset): """Apply an ``OFFSET`` to the query and return the newly resulting ``Query``. """ self._offset = offset

3.用paginate(偏移量,取出量)函數,用於BaseQuery

user_obj=User.query.filter(User.email.like(%+email+%)).paginate(int(page_index), int(page_size),False)
#遍歷時要加上items 
object_list =user_obj.items

4.filter中使用limit

db.session.query(User.name).filter(User.email.like(%+email+%) and limit (page_index - 1) * page_size, page_size)
#此處不能再跟order_by語句,否則報錯

http://www.cnblogs.com/rgcLOVEyaya/p/RGC_LOVE_YAYA_350days.html

sqlalchemy和flask-sqlalchemy的幾種分頁方法