I just got really confused. I have code that does
...join(schema.MappedClass.relation), and it works. But I had other code
that did foo = schema.MappedClass.relation, and it didn't work because
'relation' wasn't there.
The fix is to call orm.configure_mappers(), which happens by magic at
various points. Perhaps mapped classes should have a __getattr__ that
calls configure_mappers.
Here's some example code along with the rather evil hack that I used to
figure this out (I couldn't find it in the docs anywhere).
--
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.
#!/usr/bin/python
from sqlalchemy import *
from sqlalchemy import orm
import sqlalchemy as sa
import sqlalchemy.events
import traceback
metadata = sa.MetaData()
group = sa.Table(
'group', metadata,
Column('group_id', Integer, primary_key=True),
)
# This can be ignored other than for debugging.
class MetaHack(type):
def __init__(cls, name, bases, dct):
super(MetaHack, cls).__init__(name, bases, dct)
def __setattr__(self, attr, val):
# print 'Setting %s = %r' % (attr, val)
# traceback.print_stack()
type.__setattr__(self, attr, val)
class Group(object):
__metaclass__ = MetaHack
sa.orm.mapper(Group, group)
thing = sa.Table(
'thing', metadata,
Column('thing_id', Integer, primary_key=True),
Column('group_id', Integer, ForeignKey('group.group_id')),
)
class Thing(object):
pass
sa.orm.mapper(Thing, thing, properties={'group' : orm.relationship(Group, backref='things')})
try:
Group.things
except AttributeError, e:
print 'First try: %s' % e
orm.configure_mappers()
# This would also work...
#e = sa.create_engine('sqlite:///:memory:')
#s = sa.orm.create_session(bind=e)
#s.query(Group)
Group.things
print 'Now it worked'