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.