On Thu, May 30, 2013 at 3:28 PM, Claudio Freire <[email protected]>
wrote:
> On Thu, May 30, 2013 at 2:25 PM, Michael Bayer <[email protected]>
wrote:
>>
>> On May 30, 2013, at 11:25 AM, Claudio Freire <[email protected]>
wrote:
>>
>>>
>>> That way, one could use the second form up there and benefit from
>>> query hashing, because session/param binding wouldn't change the hash,
>>> and it would be a cache hit. Has it been explored already? Or maybe
>>> there's something wrong on how I'm using the compiled_cache thing?
>>> Should I start patching? ;-)
>>
>> there is a very wide gap between working with the baked query recipe,
for which I'm not aware of all the errors you refer to so more detail would
help
>
> Um... I don't remember the exact problems, will have to try it again.
> I just assumed it was targeted at an older SA release and gave up on
> it rather quickly.
So, this is what I'm getting, which is weird:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File
"/usr/local/lib64/python2.7/site-packages/chorde-0.1-py2.7-linux-x86_64.egg/chorde/decorators.py",
line 184, in cached_f
rv = f(*p, **kw)
File "metrics.py", line 291, in action_metrics
if action is not None and action.campaign is not None:
File
"/usr/local/lib64/python2.7/site-packages/SQLAlchemy-0.7.10-py2.7-linux-x86_64.egg/sqlalchemy/orm/attributes.py",
line 458, in get
value = self.callable_(state, passive)
File
"/usr/local/lib64/python2.7/site-packages/SQLAlchemy-0.7.10-py2.7-linux-x86_64.egg/sqlalchemy/orm/strategies.py",
line 481, in _load_for_state
(mapperutil.state_str(state), self.key)
sqlalchemy.orm.exc.DetachedInstanceError: Parent instance <Action at
0x36f04d0> is not bound to a Session; lazy load operation of attribute
'campaign' cannot proceed
With:
class CacheableQuery(sqlalchemy.orm.query.Query):
def __init__(self, *p, **kw):
self._cached_context = None
self._cached_context_labels = None
super(CacheableQuery, self).__init__(*p, **kw)
@sqlalchemy.orm.query._generative()
def bake(self, labels=True):
self._compile_context(labels)
def _compile_context(self, labels=True):
if self._cached_context and self._cached_context_labels == labels:
context = super(CacheableQuery, self)._compile_context(labels)
cached = self._cached_context
context.statement = cached.statement
else:
context = super(CacheableQuery, self)._compile_context(labels)
self._cached_context_labels = labels
self._cached_context = context
return context
All the rest in baked query recipe is already supported by SA, so I didn't
include it. Like with_session instead of from_session, and
execution_options() instead of hardcoding a cache.
Again, the usage is
q = blabla.bake()
...
q.with_session(S).params(..).first()
I have no idea why replacing the query messes the entity's session. Any
clue?
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.