[storm] Lazy loading?
James Henstridge
james at jamesh.id.au
Fri Sep 18 07:00:11 BST 2009
On Wed, Sep 16, 2009 at 9:00 PM, peter websdell
<flyingdeckchair at googlemail.com> wrote:
> Hello all,
> I'm new to Storm and this list.
> I have assumed so far that storm uses lazy-loading to get attributes from
> relations. Is it possible to specify auto loading of related tables? If so,
> can it be done on-the-fly, rather then in the class definition?
When you access a "Reference" attribute on an object, Storm will
perform a store.get() call to retrieve the related object. If the
object has already been loaded, then it will be returned directly. If
it hasn't, this will result in a query.
If you want to retrieve pairs of objects in a single query, you can do
that with store.find(). Something like this:
class A(object):
__storm_table__ = "a"
id = Int(primary=True)
class B(object):
__storm_table__ = "b"
id = Int(primary=True)
a_id = Int()
a = Reference(a_id, A.id)
result = store.find((B, A), B.a_id == A.id)
for (b, a) in result:
# The following won't issue a query, because "a" was loaded at the
same time as "b".
assert b.a == a
Hope this helps,
James.
More information about the storm
mailing list