paginate_sqlalchemy
выполняет то же, что и библиотека
https://github.com/Pylons/paginate, но гораздо быстрее для SQLAlchemy.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class Person(Base):
__tablename__ = 'person'
id = Column(Integer, primary_key=True)
name = Column(String(250), nullable=False)
def __repr__(self):
return "<{}>".format(self.name)
engine = create_engine('sqlite:///sqlalchemy_example.db')
Base.metadata.drop_all(engine)
Base.metadata.create_all(engine)
DBSession = sessionmaker(bind=engine)
session = DBSession()
for i in range(100):
new_person = Person(name='new person #%s' % i)
session.add(new_person)
session.commit()
query = session.query(Person)
print(query.count()) # 100
print
from paginate_sqlalchemy import SqlalchemyOrmPage
page = SqlalchemyOrmPage(query, page=5, items_per_page=8)
print(page)
print(page.items)
print(page.items[6].name)
print(page.page_count) |
Результат выполнения
100
Page:
Collection type: <class 'sqlalchemy.orm.query.Query'>
Current page: 5
First item: 33
Last item: 40
First page: 1
Last page: 13
Previous page: 4
Next page: 6
Items per page: 8
Total number of items: 100
Number of pages: 13
[<new person #32>, <new person #33>, <new person #34>, <new person #35>, <new person #36>, <new person #37>, <new person #38>, <new person #39>]
new person #38
13