diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-01-25 18:16:12 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-01-25 18:16:12 +0000 |
commit | 33a6724e33140861fbd66de61875797408a1e02e (patch) | |
tree | 78d22dae3d3b989a58fb8268f0c45088114eca54 /lib/sqlalchemy/orm/scoping.py | |
parent | fadc61e8ca03358fcbb72a9e9446ab7018e295ea (diff) | |
download | sqlalchemy-33a6724e33140861fbd66de61875797408a1e02e.tar.gz |
- added standalone "query" class attribute generated
by a scoped_session. This provides MyClass.query
without using Session.mapper. Use via:
MyClass.query = Session.query_property()
Diffstat (limited to 'lib/sqlalchemy/orm/scoping.py')
-rw-r--r-- | lib/sqlalchemy/orm/scoping.py | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/lib/sqlalchemy/orm/scoping.py b/lib/sqlalchemy/orm/scoping.py index 19cd44884..479b2f737 100644 --- a/lib/sqlalchemy/orm/scoping.py +++ b/lib/sqlalchemy/orm/scoping.py @@ -1,5 +1,5 @@ from sqlalchemy.util import ScopedRegistry, to_list, get_cls_kwargs -from sqlalchemy.orm import MapperExtension, EXT_CONTINUE, object_session +from sqlalchemy.orm import MapperExtension, EXT_CONTINUE, object_session, class_mapper from sqlalchemy.orm.session import Session from sqlalchemy import exceptions import types @@ -69,6 +69,30 @@ class ScopedSession(object): self.session_factory.configure(**kwargs) + def query_property(self): + """return a class property which produces a `Query` object against the + class when called. + + e.g.:: + Session = scoped_session(sessionmaker()) + + class MyClass(object): + query = Session.query_property() + + # after mappers are defined + result = MyClass.query.filter(MyClass.name=='foo').all() + + """ + + class query(object): + def __get__(s, instance, owner): + mapper = class_mapper(owner, raiseerror=False) + if mapper: + return self.registry().query(mapper) + else: + return None + return query() + def instrument(name): def do(self, *args, **kwargs): return getattr(self.registry(), name)(*args, **kwargs) |