"paginate" is not an SQLAlchemy function, so you'd be better off asking the author of whatever is providing that feature.
However, I would guess that maybe paginate is naively applying something like "LIMIT 20" to the query. This doesn't work properly when you join along a one-to-many relationship, because if you have (for example) 2 "parent" objects, each with 5 "child" objects, the query will return 10 rows, but SQLAlchemy de-duplicates the results to return just the 2 parent objects. Simon On Thu, Aug 13, 2020 at 3:31 PM Prerna Pandit <prerna.m.pan...@gmail.com> wrote: > > Hello, I've been struggling with this issue for the past couple of days and > would really, truly appreciate if someone could please give me pointers or > direction as to what I might be missing. > > > Here are my models; > class Aggregate(db.Model): > id = db.Column(UUID(as_uuid=True), primary_key=True, > server_default=db.text('uuid_generate_v4()')) > blocks = db.relationship('AggregateBlock', cascade='all, delete-orphan', > passive_deletes=True, > back_populates='aggregate').. > > > class AggregateBlock(db.Model): > > id = db.Column(UUID(as_uuid=True), primary_key=True, > server_default=db.text('uuid_generate_v4()')) > block_id = db.Column(UUID(as_uuid=True), > db.ForeignKey('blocks.id', ondelete='CASCADE'), > nullable=False, index=True) > aggregate_id = db.Column(UUID(as_uuid=True), > db.ForeignKey('aggregates.id', > ondelete='RESTRICT'), nullable=False) > block = db.relationship('Block', back_populates='aggregates') > aggregate = db.relationship('Aggregate', back_populates='blocks') > > > > > class Block(db.Model): > id = db.Column(UUID(as_uuid=True), primary_key=True, > server_default=db.text('uuid_generate_v4()')) > is_complete = db.Column(db.Boolean, default=False) > aggregates = db.relationship('AggregateBlock', cascade='all, > delete-orphan', > passive_deletes=True, back_populates='block') > > > from flask_sqlalchemy import SQLAlchemy > db = SQLAlchemy() > > select = > db.session.query(Aggregate).join(AggregateBlock).join(Block).filter(Block.is_complete > == complete) > > print(len(select.all()) > > print(len(select.paginate(per_page=20).items()) > > > If I do a select.all(), I get the right number of rows which is 47. However, > if I try to paginate for a per_page size say 20, I lot a less rows like 11. > select.paginate(per_page=20). > The number could go up to 21 or so as I increase the page size. Why would > paginate decrease the number of returned records? > > -- > SQLAlchemy - > The Python SQL Toolkit and Object Relational Mapper > > http://www.sqlalchemy.org/ > > To post example code, please provide an MCVE: Minimal, Complete, and > Verifiable Example. See http://stackoverflow.com/help/mcve for a full > description. > --- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sqlalchemy+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sqlalchemy/e5a14305-4e63-4467-9610-1faf3f8c8412o%40googlegroups.com. -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/sqlalchemy/CAFHwexeg0K1URZZbi4oaQHtLFkCVbE3Fn2%2BY%3DDaaZymUp9S-qg%40mail.gmail.com.