Utility classes

QueryChain

QueryChain is a wrapper for sequence of queries.

Features:

  • Easy iteration for sequence of queries
  • Limit, offset and count which are applied to all queries in the chain
  • Smart __getitem__ support

Initialization

QueryChain takes iterable of queries as first argument. Additionally limit and offset parameters can be given

chain = QueryChain([session.query(User), session.query(Article)])

chain = QueryChain(
    [session.query(User), session.query(Article)],
    limit=4
)

Simple iteration

chain = QueryChain([session.query(User), session.query(Article)])

for obj in chain:
    print obj

Limit and offset

Lets say you have 5 blog posts, 5 articles and 5 news items in your database.

chain = QueryChain(
    [
        session.query(BlogPost),
        session.query(Article),
        session.query(NewsItem)
    ],
    limit=5
)

list(chain)  # all blog posts but not articles and news items


chain = chain.offset(4)
list(chain)  # last blog post, and first four articles

Just like with original query object the limit and offset can be chained to return a new QueryChain.

chain = chain.limit(5).offset(7)

Chain slicing

chain = QueryChain(
    [
        session.query(BlogPost),
        session.query(Article),
        session.query(NewsItem)
    ]
)

chain[3:6]   # New QueryChain with offset=3 and limit=6

Count

Let’s assume that there are five blog posts, five articles and five news items in the database, and you have the following query chain:

chain = QueryChain(
    [
        session.query(BlogPost),
        session.query(Article),
        session.query(NewsItem)
    ]
)

You can then get the total number rows returned by the query chain with count():

>>> chain.count()
15

API

class sqlalchemy_utils.query_chain.QueryChain(queries, limit=None, offset=None)[source]

QueryChain can be used as a wrapper for sequence of queries.

Parameters:
  • queries – A sequence of SQLAlchemy Query objects
  • limit – Similar to normal query limit this parameter can be used for limiting the number of results for the whole query chain.
  • offset – Similar to normal query offset this parameter can be used for offsetting the query chain as a whole.
count()[source]

Return the total number of rows this QueryChain’s queries would return.