Queries¶
You can query history models just like any other sqlalchemy declarative model.
from sqlalchemy_continuum import version_class
ArticleVersion = version_class(Article)
session.query(ArticleVersion).filter_by(name=u'some name').all()
How many transactions have been executed?¶
from sqlalchemy_continuum import transaction_class
Transaction = transaction_class(Article)
Transaction.query.count()
Querying for entities of a class at a given revision¶
In the following example we find all articles which were affected by transaction 33.
session.query(ArticleVersion).filter_by(transaction_id=33)
Querying for transactions, at which entities of a given class changed¶
In this example we find all transactions which affected any instance of ‘Article’ model. This query needs the TransactionChangesPlugin.
TransactionChanges = Article.__versioned__['transaction_changes']
entries = (
session.query(Transaction)
.innerjoin(Transaction.changes)
.filter(
TransactionChanges.entity_name.in_(['Article'])
)
)
Querying for versions of entity that modified given property¶
In the following example we want to find all versions of Article class which changed the attribute ‘name’. This example assumes you are using PropertyModTrackerPlugin.
ArticleVersion = version_class(Article)
session.query(ArticleHistory).filter(ArticleVersion.name_mod).all()