flywheel.query module

Query and Scan builders

exception flywheel.query.DuplicateEntityException[source]

Bases: exceptions.ValueError

Raised when too many results are found.

exception flywheel.query.EntityNotFoundException[source]

Bases: exceptions.ValueError

Raised when results are expected and not found.

class flywheel.query.Query(engine, model)[source]

Bases: object

An object used to query dynamo tables

See the Engine for query examples

Parameters:

engine : Engine

model : class

Subclass of Model

all(desc=False, consistent=False, attributes=None, filter_or=False)[source]

Return the query results as a list

Parameters:

desc : bool, optional

Return results in descending order (default False)

consistent : bool, optional

Force a consistent read of the data (default False)

attributes : list, optional

List of fields to retrieve from dynamo. If supplied, returns dicts instead of model objects.

filter_or : bool, optional

If True, multiple filter() constraints will be joined with an OR (default AND).

Returns:

results : list

count(filter_or=False)[source]

Find the number of elements the match this query

Parameters:

filter_or : bool, optional

If True, multiple filter() constraints will be joined with an OR (default AND).

Returns:

count : int

delete(filter_or=False)[source]

Delete all items that match the query

Parameters:

filter_or : bool, optional

If True, multiple filter() constraints will be joined with an OR (default AND).

dynamo[source]

Shortcut to access DynamoDBConnection

filter(*conditions, **kwargs)[source]

Add a Condition to constrain the query

Notes

The conditions may be passed in as positional arguments:

engine.query(User).filter(User.id == 12345)

Or they may be passed in as keyword arguments:

engine.query(User).filter(firstname='Monty', lastname='Python')

The limitations of the keyword method is that you may only create equality conditions. You may use both types in a single filter:

engine.query(User).filter(User.num_friends > 10, name='Monty')
first(desc=False, consistent=False, attributes=None, filter_or=False)[source]

Return the first result of the query, or None if no results

Parameters:

desc : bool, optional

Return results in descending order (default False)

consistent : bool, optional

Force a consistent read of the data (default False)

attributes : list, optional

List of fields to retrieve from dynamo. If supplied, returns dicts instead of model objects.

filter_or : bool, optional

If True, multiple filter() constraints will be joined with an OR (default AND).

Returns:

result : Model or None

gen(desc=False, consistent=False, attributes=None, filter_or=False)[source]

Return the query results as a generator

Parameters:

desc : bool, optional

Return results in descending order (default False)

consistent : bool, optional

Force a consistent read of the data (default False)

attributes : list, optional

List of fields to retrieve from dynamo. If supplied, gen() will iterate over dicts instead of model objects.

filter_or : bool, optional

If True, multiple filter() constraints will be joined with an OR (default AND).

Returns:

results : generator

index(name)[source]

Use a specific local or global index for the query

limit(count)[source]

Limit the number of query results

one(consistent=False, attributes=None, filter_or=False)[source]

Return the result of the query. If there is not exactly one result, raise a ValueError

Parameters:

consistent : bool, optional

Force a consistent read of the data (default False)

attributes : list, optional

List of fields to retrieve from dynamo. If supplied, returns dicts instead of model objects.

filter_or : bool, optional

If True, multiple filter() constraints will be joined with an OR (default AND).

Returns:

result : Model

Raises:

e1 : EntityNotFoundException

If no entity is found. Subclasses ValueError.

e2 : DuplicateEntityException

If more than one entity is found. Subclasses ValueError.

tablename[source]

Shortcut to access dynamo table name

class flywheel.query.Scan(engine, model)[source]

Bases: flywheel.query.Query

An object used to scan dynamo tables

scans are like Queries except they don’t use indexes. This means they iterate over all data in the table and are SLOW

Parameters:

engine : Engine

model : class

Subclass of Model

count(filter_or=False)[source]
gen(attributes=None, desc=False, consistent=False, filter_or=False)[source]
index(name)[source]