Hi all, I observed that if I define a relation (foo_query) as lazy='dynamic' and access all referenced entities with foo_query.all() that the query will be executed every time i access it. That is not a big surprise ;-)
In a library I am writing i want to provide methods that allow
pre-filtering of referenced entities and also on that provides access to
all entities. I am wondering if it is better/faster/.. to define *two*
relations for filtering and accessing all entities respectively.
I can't really decide between the following two approaches and would be
happy if someone could provide some tips:
Approach 1
----------
Class Bar(object):
def all_foo(self):
foo_query.all()
def foo_startwith(self, search_string):
foo.query.filter(tbl.c.col.like('%s%%'% ...))
mapper(Bar,
...
properties={
'foo_query': relation(Foo, lazy='dynamic')
})
Approach 2
----------
Class Bar(object):
def foo_startwith(self, search_string):
foo.query.filter(tbl.c.col.like('%s%%'% ...))
mapper(Bar,
...
properties={
'all_foo': relation(Foo)
})
properties={
'foo_query': relation(Foo, lazy='dynamic')
})
Which one is faster? Does it make a difference, given the
optimisation/cache in the database? Will it just mean more bloat in the
mapper definition?
thanks
Wolodja Wentland
signature.asc
Description: Digital signature
