Домой Edit me on GitHub

2019-03-15

Каналы передачи данных | Сетевое программирование | Базы данных | Основы Веб-программирования

Пагинация

paginate_sqlalchemy выполняет то же, что и библиотека https://github.com/Pylons/paginate, но гораздо быстрее для SQLAlchemy.

3.pagination/example.py
 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
Previous: ORM (объектно-реляционное отображение) Next: Формы